TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #647 275
اکنون Signature حقیقت را بیان می‌کند و دیگر از Exception برای کنترل جریان برنامه استفاده نمی‌شود:
public UserResult GetUser(int id) =>
_users.TryGetValue(id, out var user)
? user
: new NotFound(id);

و فراخواننده مجبور است هر دو حالت را مدیریت کند؛ کامپایلر اجازه نخواهد داد که یکی از آن‌ها را فراموش کنید:
IResult response = GetUser(42) switch
{
User user => Results.Ok(user),
NotFound found => Results.NotFound($"No user with id {found.Id}"),
};

تمام ایده همین است.
نوع بازگشتی متد حقیقت را بیان می‌کند:
این‌ها دقیقاً حالت‌هایی هستند که دریافت خواهید کرد و نمی‌توانید به‌صورت تصادفی یکی از آن‌ها را نادیده بگیرید.
دیگر نیازی نیست برای فهمیدن اینکه متد چه Exceptionهایی ممکن است پرتاب کند، بدنه آن را بررسی کنید.
⚠️ چند نکته مهم

این قابلیت هنوز در مرحله Preview و Experimental قرار دارد.
چند نکته که باید در نظر داشته باشید:
🔹 این قابلیت C# 15 و NET 11. را هدف قرار داده است و ممکن است Syntax آن تا زمان انتشار نهایی تغییر کند. برای آزمایش می‌توانید از NET 11 Preview 4. یا نسخه‌های جدیدتر استفاده کنید.
🔹 در پشت صحنه، Union به یک Struct تبدیل می‌شود که Caseهای Value Type را Boxing کرده و محتوا را به شکل یک ?object نگهداری می‌کند. برای سناریوهای حساس به Performance مسیر Non-Boxing نیز در نظر گرفته شده است، اما رفتار پیش‌فرض ساده نگه داشته شده است.
🔹 این قابلیت فعلاً یک Type Union (A یا B) است، نه یک Discriminated Union کامل با Caseهای نام‌گذاری‌شده. با این حال، بخش عمده سناریوهایی را که امروز برای آن‌ها از OneOf استفاده می‌کنم پوشش می‌دهد.
📌 جمع‌بندی

ءUnion Typeها یکی از خلأهای قدیمی و مهم #C را برطرف می‌کنند.
شما می‌توانید:
public union Name(A, B, C);

تعریف کنید.
مقادیر Caseها را مستقیماً Assign کنید و از Conversionهای ضمنی استفاده کنید.
ءPattern Matching را همراه با بررسی کامل Exhaustiveness توسط کامپایلر انجام دهید، بدون اینکه به default یا _ نیاز داشته باشید.
ءResultها، Optionها و خروجی‌های «یکی از این چند حالت» را بدون نیاز به Marker Interfaceها، Base Classها یا کتابخانه‌های جانبی مدل‌سازی کنید.
این قابلیت از نظر Syntax کوچک است، اما تأثیر بسیار بزرگی دارد:
امضای متدها بالاخره حقیقت را درباره خروجی خود بیان می‌کنند و کامپایلر نیز اطمینان حاصل می‌کند که تمام حالت‌ها به‌درستی مدیریت شده‌اند.
🙏 از اینکه مطالعه کردید متشکرم.

🔖هشتگ‌ها:
#csharp #dotnet11 #csharp15 #uniontypes
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 →