C# 7.1 - Pattern-Matching with Generics
C# 7.1 پشتیبانی بهتری از pattern-matching را جهت کار با Generics ارائه دادهاست.
در اینجا یک کلاس پایه خودرو و سپس یک کلاس مشتق شدهی خودروهای ورزشی را داریم. اکنون در جائی از برنامه میخواهیم متد راندن این خودروها را تعریف کنیم:
در اینجا نوع خودرو به صورت جنریک تعریف شدهاست و سپس با استفاده از قابلیتهای pattern-matching سعی در انطباق با آنها را داریم. کامپایل این قطعه کد در C# 7.0 با خطای کامپایلر ذیل متوقف میشود:
اگر این قطعه کد را بخواهیم با C# 7.0 کامپایل کنیم نیاز است ابتدا شیء دریافتی به object تبدیل شود و سپس کار pattern-matching با موفقیت صورت خواهد گرفت:
این محدودیت در C# 7.1 برطرف شدهاست و دیگر نیازی به این cast اضافه نیست و میتوان (object) را از قطعه کد فوق حذف کرد.
C# 7.1 پشتیبانی بهتری از pattern-matching را جهت کار با Generics ارائه دادهاست.
public class Car {} public class SportsCar : Car { public string Color { get; set; } }
public static void Run<T>(T car) where T : Car { if (car is SportsCar sportsCar) { } switch (car) { case SportsCar sCar: break; } }
An expression of type "T" cannot be handled by a pattern of type "SportsCar"
اگر این قطعه کد را بخواهیم با C# 7.0 کامپایل کنیم نیاز است ابتدا شیء دریافتی به object تبدیل شود و سپس کار pattern-matching با موفقیت صورت خواهد گرفت:
public static void Run<T>(T car) where T : Car { if ((object)car is SportsCar sportsCar) { } switch ((object)car) { case SportsCar sCar: break; } }