TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #89 233
✨ از دستور به عبارت: تکامل switch در #C مدرن (Switch Expressions)

تو پست‌های قبلی با switch کلاسیک و switch با Pattern Matching آشنا شدیم. اما انقلاب switch اینجا تموم نمیشه! از C# 8 به بعد، switch می‌تونه به عنوان یک عبارت (Expression) هم استفاده بشه.

یعنی چی؟ یعنی می‌تونه یه مقدار رو برگردونه! این قابلیت، کدهای شرطی رو به شدت کوتاه‌تر و خواناتر می‌کنه.

1️⃣ معرفی switch expression: خداحافظی با case و break

در این حالت جدید، switch دیگه یه دستور برای کنترل جریان نیست، بلکه یه عبارته که یه مقدار تولید می‌کنه. سینتکسش خیلی خلاصه‌تر و تمیزتره:

متغیر قبل از switch میاد.

به جای case x: و break;، از x => result, استفاده می‌کنیم.

برای حالت default، از _ (discard pattern) استفاده می‌کنیم.
string cardName = cardNumber switch
{
13 => "King",
12 => "Queen",
11 => "Jack",
_ => "Pip card" // معادل default
};


نکته مهم ⚠️: برخلاف switch statement، اگه تو یه switch expression حالت پیش‌فرض (_) رو نذارید و هیچکدوم از حالت‌ها هم با مقدار ورودی نخونه، برنامه‌تون با یه Exception کرش می‌کنه!
2️⃣ قدرت اصلی: سوییچ روی چند مقدار با Tuple Pattern

قدرت واقعی switch expression وقتی مشخص میشه که می‌فهمید می‌تونید روی چند تا مقدار همزمان سوییچ کنید! این کار با استفاده از Tuples انجام میشه.
string cardName = (cardNumber, suite) switch
{
(13, "spades") => "King of spades",
(13, "clubs") => "King of clubs",
(12, "spades") => "Queen of spades",
// ...
_ => "Some other card"
};


این قابلیت به شما اجازه میده شرط‌های خیلی پیچیده رو به شکلی فوق‌العاده خوانا و تمیز بنویسید.

🤔 حرف حساب و تجربه شما

این switch expression یکی از بهترین قابلیت‌های مدرن #C برای نوشتن کدهای تابعی (Functional)، خوانا و خلاصه‌ست و در LINQ هم بسیار پرکاربرده.

شما از switch expression تو کدهاتون استفاده می‌کنید؟ به نظرتون این سینتکس از switch statement قدیمی بهتره؟

خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامه‌ی بحث، سوالات، غر زدن ها و گپ و گفت‌های خودمونی، فقط تو گروه.
[C# Geeks Hangout]

🔖 هشتگ‌ها:
#CSharp #Programming #Developer #DotNet #ModernCSharp #SwitchExpression #CleanCode
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 →