TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 549 subscribers
Post #276 113
📖 سری آموزشی کتاب C# 12 in a Nutshell

🏷 راهنمای کامل 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
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →