Range Type در سی شارپ ۸

ساخت وبلاگ

Range Type

در این مقاله، میخواهیم در مورد Range Type در سی شارپ ۸ صحبت کنیم. تا پایان این مقاله همراه ما باشید.

اگر مطمئن نیستید که از سی شارپ ۸ استفاده می کنید یا نمی دانید چگونه می توانید به این ویژگی ها دسترسی پیدا کنید.

این  راهنمای سریع در مورد راه اندازی با .NET Core و سی شارپ ۸ را بخوانید.

Introduction To Range Type

بیایید ابتدا تعدادی کد را نشان دهیم و از آنجا ما می توانیم تلاش کنیم که چندین چیز مختلف را امتحان کنیم.

کد شروع ما اینگونه به نظر می رسد:

static void Main(string[] args)
{ var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; for(int i=1; i <= 3; i++) { Console.WriteLine(myArray[i]); } Console.ReadLine();
}

بنابراین در اصل ما به دنبال این هستیم که از لیست ” index ” به ۱ – ۳ برویم و item را تولید کنیم.

با کمال تعجب وقتی این کد را اجرا می کنیم دریافت می کنیم

Item2
Item3
Item4

اما بگذارید بگوییم که ما نمی خواهیم از حلقه for استفاده کنیم ، و در عوض می خواهیم از این چیز جدید fandangle به نام “دامنه” استفاده کنیم.

ما می توانیم کد خود را دوباره بنویسیم مانند:

static void Main(string[] args)
{ var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; foreach (var item in myArray[1..3]) { Console.WriteLine(item); } Console.ReadLine();
}

و هنگامی که ما آن را اجرا کنیم؟

Item2
Item3

اوه اوه … ما یک مورد کمتر از آنچه تصور می کردیم ، داریم.

ما هنگام استفاده از محدوده ها به اولین gotcha مان رسیدیم. شروع یک range فراگیر است ، اما پایان یک محدوده منحصر به فرد است.

در صورت تغییر کد خود به:

static void Main(string[] args)
{ var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; foreach (var item in myArray[1..4]) { Console.WriteLine(item); } Console.ReadLine();
}

سپس نتیجه مورد انتظار را می گیریم.

Shortcut Ranges

استفاده از محدوده هایی که “From this index to this index” هستند بسیار مفید است. اما درمورد “From this index to the end” چه ؟ محدوده های خوب را پوشش داده اید!

From An Index (Inclusive) To The End Inclusive

static void Main(string[] args)
{ var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; foreach (var item in myArray[1..]) { Console.WriteLine(item); } Console.ReadLine();
}

خروجی

Item2
Item3
Item4
Item5

From The Start (Inclusive) To An Index (Exclusive)

foreach (var item in myArray[..3])
{ Console.WriteLine(item);
}

خروجی

Item1
Item2
Item3

وارد کردن محدوده ی (Inclusive)

foreach (var item in myArray[..])
{ Console.WriteLine(item);
}

خروجی

Item1
Item2
Item3
Item4
Item5

From Index (Inclusive) To X From The End (Inclusive)

این سزاوار توصیف سریع است.

در واقع ما یک عملگر جدید ^ داریم که اکنون برای تعیین “From the end ” استفاده می شود.

من این یکی را به عنوان “Inclusive” برچسب گذاری کردم ، اما واقعاً بستگی به این دارد که شما چگونه در”پایان” فکر می کنید.

در ذهن من در لیست ۵ مورد ^ ۱ به مورد ۴ اشاره دارد. بنابراین اگر در نتیجه گنجانده شود ، Inclusive (فراگیر) است.

foreach (var item in myArray[1..^1])
{ Console.WriteLine(item);
}

خروجی

Item2
Item3
Item4

هنگامی که ما ۱..۴ را می نویسیم ، به نظر می رسد که ما با یک عدد صحیح در یک قالب جدید خاص سروکار داریم ، اما در واقع این تقریباً نحو اولیه سازی برای یک range است.

مشابه اینکه چگونه می توانیم از {“۱” ، “۲” ، “۳” استفاده کنیم تا ما را در ایجاد یک آرایه یا لیست نشان دهد.

ما در واقع می توانیم دامنه را از اینجا دور کنیم ، و نوع جدیدی را ایجاد کنیم

static void Main(string[] args)
{ var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; Range range = 1..4; foreach (var item in myArray[range]) { Console.WriteLine(item); } Console.ReadLine();
}

این می تواند برای انتقال به یک روش جدید یا استفاده مجدد مفید باشد.

فکر می کنم به جای استفاده از دو مقدار جداگانه ، مقدار خاصی از X و Y را برای مشخص کردن مقادیر مشابه System.Drawing.Point استفاده کنید.

بستر جدید

یک نکته بسیار مفید در مورد دامنه ها این است که می توان آنها را به عنوان روشی سریعتر برای انجام عملیات doString.Substring استفاده کرد. مثلا :

Console.WriteLine("123456789"[1..4]);

۲۳۴ تولید می کند.

بدیهی است که این یک تغییر جزئی در تفکر به دلیل string است سوبستینگ ““From this index to this Index” نیست بلکه در عوض “From this index count this many characters”.

Who Uses Arrays Anyway? What About List<T<

بنابراین وقتی اولین بار با این بازی کردم. همانطور که معلوم است من نمی توانستم کاری را انجام دهم که اشتباه است…. به این دلیل بود که من به جای یک Array از یک لیست <T> استفاده می کردم.

خیلی حدس نمی زنم اما اکثر اوقات می گویم که “یک لیست” یا “مجموعه” یا داده را در یک برنامه شغلی مشاهده می کنید ، این نوع از لیست <T> خواهد بود.

و خب .. استفاده از Ranges در دسترس نیست. من همچنین نمی توانم هیچ صحبتی در مورد ساخته شدن آن بکنم.

(Possibly because of the linked list nature of List<T> Apparently List<T> is not a linkedlist at all! So then I’m not sure why Ranges are not available)

آموزشی برنامه نویسی...
ما را در سایت آموزشی برنامه نویسی دنبال می کنید

برچسب : نویسنده : دانلودی source بازدید : 641 تاريخ : سه شنبه 12 فروردين 1399 ساعت: 8:11