یک ویژگی زبان کوچک اما مفید، enums میتواند به شما کمک کند کد پاکتر و ایمنتری بنویسید.
Enums یک نوع داده مفید است که به شما امکان می دهد لیستی از گزینه های نامگذاری شده را برای یک متغیر تعریف کنید. به عنوان مثال، اگر می خواهید هر روز هفته را ذخیره کنید، می توانید از یک enum برای نمایش مقادیر معتبر استفاده کنید.
Enum ها با تشویق نام های معنی دار و محدود کردن مقادیری که می توانید استفاده کنید خواندن و نوشتن کد شما را آسان تر می کند. اغلب استفاده از دستور switch برای مدیریت مقادیر احتمالی enum راحت است.
شما می توانید در بسیاری از زبان های برنامه نویسی، از جمله سی شارپ، enum ها را اعلام و استفاده کنید.
نحوه اعلان Enum در سی شارپ
در سی شارپ، معمولاً enum ها را در سطح فضای نام اعلام می کنید. به عنوان مثال، در یک برنامه کنسول سی شارپ، می توانید enum های خود را به عنوان ویژگی های کلاس اعلام کنید. می توانید یک نمونه را در این مخزن GitHub مشاهده کنید.
class Program
{
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
static void Main(string[] args)
{
}
}
هنگامی که یک enum را اعلام می کنید، هر گزینه یک مقدار صحیح برای نشان دادن شاخص خود دریافت می کند. به طور پیش فرض، اولین مقدار در enum دارای مقدار شاخص 0 است. برای تغییر این، می توانید هنگام اعلام enum، شاخص خود را برای اولین عنصر مشخص کنید:
enum Weekday {
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
در این حالت، شاخص اولین عنصر دوشنبه از 1 شروع می شود. شاخص عنصر بعدی سه شنبه 2 خواهد بود و به همین ترتیب.
نحوه دسترسی به مقدار Enum در سی شارپ
راه های مختلفی برای دسترسی به مقادیر ذخیره شده در enums وجود دارد. مقدار بازگردانده شده برای هر گزینه در enum شاخص است. برای این مثال، مقدار Weekday.Friday برابر با 5 است.
یکی از راههایی که میتوانید نام enum را بازیابی کنید، استفاده از تابع () Enums.GetName است. این نام گزینه را در شاخص 5 دریافت می کند:
string friday = Enum.GetName(typeof(Weekday), Weekday.Friday);
Console.WriteLine("Thank God it's " + friday + "!");
// Output = Thank God it's Friday!
همچنین می توانید با استفاده از شاخص آن به یک مقدار دسترسی پیدا کنید. در این حالت، مقدار شاخص 2 در شماره روز هفته (که سه شنبه است) در متغیر ذخیره می شود:
Weekday tuesday = (Weekday)2;
Console.WriteLine("Today is " + tuesday);
// Output = Today is Tuesday
هنگامی که یک enum را به عنوان آرگومان به Console.WriteLine()، متد toString() برای enum به طور خودکار اجرا می شود. این بدان معنی است که به جای چاپ مقدار عددی واقعی enum که 5 است، مقدار رشته، جمعه را چاپ می کند.
Console.WriteLine(Weekday.Thursday + " is the new " + Weekday.Friday);
// Output = Thursday is the new Friday
همچنین می توانید نوع داده را به یک عدد صحیح به عنوان روش دیگری برای ذخیره شاخص گزینه تبدیل یا تجزیه کنید:
int mondayIndex = (int)Weekday.Monday;
Console.WriteLine(mondayIndex);
// Output = 1
نحوه مقایسه Enum ها در سی شارپ
در سی شارپ، می توانید enum ها را با استفاده از عملگرهای مقایسه (==، !=، <، >، <=، >=) مقایسه کنید. این مقدار عددی گزینه ها را با هم مقایسه می کند.
Weekday day1 = Weekday.Monday;
Weekday day2 = Weekday.Tuesday;
if (day1 == day2)
{
Console.WriteLine("The days are the same.");
}
else
{
Console.WriteLine("The days are different.");
}
در این مثال، مقدار Weekday.Monday 1 است و مقدار Weekday.Tuesday 2 است، بنابراین مقایسه 1 == 2 ناموفق خواهد بود.
روش دیگر برای مقایسه enums متد Equals() است:
if (day1.Equals(day2))
{
Console.WriteLine("The days are the same.");
}
else
{
Console.WriteLine("The days are different.");
}
همچنین می توانید از دستور سوئیچ C# برای مقایسه یک مقدار در برابر هر گزینه در enum استفاده کنید. در این مثال، کد در حالت چهارشنبه قرار می گیرد:
Weekday valueToCompare = Weekday.Wednesday;
switch (valueToCompare)
{
case Weekday.Monday:
Console.WriteLine("I need coffee.");
break;
case Weekday.Tuesday:
Console.WriteLine("I need coffee.");
break;
case Weekday.Wednesday:
Console.WriteLine("I need coffee.");
break;
case Weekday.Thursday:
Console.WriteLine("Thursday is the new Friday!");
break;
case Weekday.Friday:
Console.WriteLine("Thank God it's Friday!");
break;
case Weekday.Saturday:
Console.WriteLine("My favorite day!");
break;
case Weekday.Sunday:
Console.WriteLine("My other favorite day!");
break;
default:
Console.WriteLine("Invalid day of the week.");
break;
}
نحوه تکرار بر روی Enums در سی شارپ
میتوانید با استفاده از متد ()Enum.GetValues، که آرایهای از تمام مقادیر موجود در enum را برمیگرداند، روی enums در سی شارپ تکرار کنید. این قطعه کد هر روز هفته از جمله دوشنبه، سه شنبه و غیره را چاپ می کند:
foreach (Weekday day in Enum.GetValues(typeof(Weekday)))
{
Console.WriteLine((int)day); // To print the index
Console.WriteLine(day); // To print the text value
}
همچنین می توانید با استفاده از روش Enum.GetNames() روی مقادیر enum تکرار کنید. فهرستی از مقادیر رشته را برای نشان دادن نام گزینههای enum برمیگرداند:
foreach (string name in Enum.GetNames(typeof(Weekday)))
{
int index = (int)(Weekday)Enum.Parse(typeof(Weekday), name);
Console.WriteLine(index); // To print the index
Console.WriteLine(name); // To print the text value
}
استفاده از Enums در سی شارپ
شما می توانید از enums در کد خود استفاده کنید تا آن را خواناتر و کمتر مستعد باگ کنید. Enum ها همچنین در صورت جفت شدن با ساختارهای دیگر مانند دیکشنری ها می توانند بسیار مفید باشند.