پنج ویژگی برتر جدید C# 7.0 در Visual Studio 2017

اخیرا جدیدترین نسخه از Visual Studio و همراه با آن تعدادی از ویژگی های جدید C# 7.0 منتشر شد. در این مقاله ما در مورد پنج ویژگی جدیدی که در C# 7.0 ارائه شده است توضیح خواهیم داد.

پنج ویژگی برتر جدید C# 7.0 در Visual Studio 2017

اعلام متغیر خارجی (Out variable) بصورت درون خطی

این متغیر ها به شما اجازه تعریف یک متغیر خارجی را بصورت inline میدهند. درواقع این روش بسیار ساده و فوق العاده است. چرا یک متغییر را در یک خط دیگر تعریف کنیم وقتی تنها کاری که با آن انجام میدهیم نمایش نتیجه تابع در خارج آن است. به کد زیر توجه نمایید:

            Console.Write("What is your age: ");
            string ageText = Console.ReadLine();

            // inline متغییر خارجی بصورت 
            bool isValidAge = int.TryParse(ageText, out int age);

            Console.WriteLine($"سن شما { age } است.");

یک تغییر کوچک و کم کردن یک خط و برخی از شلوغی های کد شما است.

تطبیق الگو

Pattern matching توانایی فوق العاده بررسی object و ارسال آن به یک متغیر را در صورتی که از نوع موردنظر شما باشد میدهد. در این مثال ما قصد داریم عدد یا رشته بودن یک object را برسی کنیم. لازم نیست Pattern matching خیلی خاص باشد ولی تطابق الگو واقعا در آن صورت میگیرد.

            string ageFromConsole = "21";
            int ageFromDatabase = 84;

            object ageVal = ageFromDatabase;

            if (ageVal is int age || (ageVal is string ageText && int.TryParse(ageText, out age)))
            {
                Console.WriteLine($"سن شما: { age }.");
            }
            else
            {
                Console.WriteLine("سن شما وارد نشده.");
            }

توجه داشته باشید که شما میتوانید مقدار متغییر ageVal را برای تست عملکرد Pattern matching از ageFromDatabase به ageFromConsole تغییر دهید.

دستورات قدرتمند Switch

برای مدت زمان طولانی استفاده از دستورات Switch اجتناب شده است. آنها معمولا همانند دستورات if/elseif/else عمل نمیکنند. در حال حاظر switch نهایت توجه را به خود جلب میکند چرا که میتوانیم با استفاده از آن pattern matching را در یک دستور انجام دهیم. به کد زیر توجه نمایید:

            foreach (var p in people)
            {
                switch (p)
                {
                    case Employee e when (e.IsManager == false):
                        Console.WriteLine($"{e.FirstName} کارمند خوبی است");
                        break;
                    case Employee e when (e.IsManager):
                        Console.WriteLine($"{e.FirstName} کار خود را شروع کرد");
                        break;
                    case Customer c when (c.TotalDollarsSpent > 1000):
                        Console.WriteLine($"{c.FirstName} یک مشتری خوب است");
                        break;
                    case Customer c:
                        Console.WriteLine($"{c.FirstName} نیاز به دریافت حقوق دارد");
                        break;
                    default:
                        break;
                }
            }

آیا میخواهید از دستورات if/elseif/else استفاده نمایید؟

Throw در Exceptions

شاید این یک ویژگی باشد که از آن استفاده نمیکنید اما در زمان نیاز بسیار عالی خواهد بود. شما میتوانید exception صحیح را در یک خط ارسال نمایید. در این مثال ما از عملگر (??) استفاده کرده ایم تا یک record یا یک exception را فراخوانی کنیم.

Employee ceo = people.Where(x => x.IsManager).FirstOrDefault() ?? throw new Exception("خطا در پیدا کردن مدیر سیستم");

بهبود یافته Tuple 

Tuple یک تابع درجه یک در C# 7.0 است. Tuple یک مکانیسم برای پاس دادن دو یا چند مقدار بدون تعریف structure یا class است. در نسخه جدید Tuple را میتوان از یک تابع بازگشت داد. و این بدان معنی است که نوع بازگشتی در تابع میتواند از مقادیر Tuple باشد.

نکته: در زمان انتشار این مقاله برای استفاده از این امکان شما باید از NuGet خود System.ValueTuple را اضافه کنید. در آینده نزدیک این امکان باید بطور مستقیم از C # 7.0 در دسترس باشد.

public static (string firstName, string lastName, bool itWorked) SplitName(string fullName)
{
 string[] vals = fullName.Split(' ');

return (vals[0], vals[1], true);
}

و برای استفاده از کد زیر استفاده نمایید.

var name = SplitName("رضا رضایی");
            Console.WriteLine($"نام شما { name.firstName } و نام خانوادگی شما { name.lastName }.");
            Console.ReadKey();

ویژگی های جدید C # 7.0 فوق العاده هستند و به شما برای تمرکز بر کارایی برنامه های خود، تجربه برنامه نویسی ساده تر، قوی تر و تمیزی بیشتر کد ها را به شما میدهد. بالا بردن قدرت برنامه و کاهش پیچیدگی از نشانه های یک برنامه نویس بزرگ است.

آموزش سی شارپ

آموزش سی شارپ 7