🏷 راهنمای کامل Enum در #C: فراتر از چند اسم ثابت
وقتی میخواید یه مجموعه از مقادیر ثابت و مرتبط رو تعریف کنید (مثل جهتها، رنگها، یا وضعیتها)، اولین چیزی که باید به ذهنتون برسه Enum هست. Enumها به کد شما خوانایی و ایمنی نوع (Type Safety) میدن.
بیاید با تمام جزئیاتشون آشنا بشیم.
1️⃣ Enum چیست و چه ساختاری دارد؟
Enum
یک نوع داده ارزشی (Value Type) خاصه که به شما اجازه میده برای یک گروه از ثابتهای عددی، اسمهای معنادار تعریف کنید.
public enum BorderSide { Left, Right, Top, Bottom }پشت صحنه: 🧐
هر عضو Enum یک مقدار عددی صحیح داره. به صورت پیشفرض:
نوع داده زیرین، int است.
مقادیر به ترتیب از 0 شروع میشن (Left=0, Right=1, Top=2, ...).
سفارشیسازی:
شما میتونید هم نوع داده زیرین و هم مقدار هر عضو رو خودتون مشخص کنید:
public enum BorderSide : byte // تغییر نوع به بایت
{
Left = 1,
Right, // مقدارش میشه 2 (یکی بیشتر از قبلی)
Top = 10,
Bottom // مقدارش میشه 11 (یکی بیشتر از قبلی)
}
2️⃣ تبدیلها (Conversions)
شما میتونید یه Enum رو به مقدار عددی زیرینش و برعکس، به صورت صریح (explicit) کست کنید.
BorderSide side = BorderSide.Left; // side = 1
int i = (int)side; // i = 1
BorderSide side2 = (BorderSide)i; // side2 = BorderSide.Left
نکته جالب: 💡 لیترال عددی
0 تنها عددیه که برای انتساب به Enum نیاز به کست نداره.3️⃣ تله بزرگ: Type-Safety و مقادیر نامعتبر! ⚠️
این مهمترین نکته در مورد Enumهاست. با اینکه Enumها به ما Type Safety میدن، ولی به خاطر قابلیت کست شدن از عدد، یه متغیر Enum میتونه یه مقدار عددی نامعتبر (خارج از مقادیر تعریف شده) رو تو خودش نگه داره!
// این کد کامپایل و اجرا میشه، ولی b حاوی یک مقدار بیمعنیه
BorderSide b = (BorderSide)12345;
Console.WriteLine(b); // خروجی عددی: 12345
این رفتار میتونه منطق if-else یا switch شما رو که انتظار مقادیر مشخصی رو دارن، کاملاً به هم بریزه.
4️⃣ راه حل: اعتبارسنجی با Enum.IsDefined ✅
برای اینکه مطمئن بشید یه مقدار Enum معتبره، میتونید از متد استاتیک Enum.IsDefined استفاده کنید.
BorderSide side = (BorderSide)12345;
bool isValid = Enum.IsDefined(typeof(BorderSide), side);
Console.WriteLine(isValid); // خروجی: False
🤔 حرف حساب و تجربه شما
درک این جزئیات و تلههای Enum، به شما کمک میکنه کدهای امنتر و قابل اعتمادتری بنویسید.
🔖 هشتگها:
#CSharp #DotNet #Enum #TypeSafety