is — فحص النوع أو القيمة
object value = 42;
if (value is int number)
{
Console.WriteLine($"عدد صحيح: {number}");
}
is يفحص التوافق ويسنِد القيمة لمتغيّر جديد في خطوة واحدة — أوضح من as مع فحص null بعدها.
تعبير switch (Switch Expression)
بديل أقصر لجملة switch التقليدية عندما تريد قيمة بدل تنفيذ أوامر:
string Grade(int score) => score switch
{
>= 90 => "ممتاز",
>= 75 => "جيد جدًا",
>= 60 => "مقبول",
_ => "راسب"
};
كل ذراع: نمط ثم => ثم تعبير، مفصولة بفواصل. _ هو نمط التجاهل (discard) ويطابق أي شيء لم تطابقه الأذرع السابقة.
أنماط الخاصية (Property Patterns)
تفحص خصائص كائن مباشرة داخل النمط:
class Order
{
public decimal Total;
public string Country = "";
}
string ShippingFee(Order o) => o switch
{
{ Country: "SA", Total: >= 200 } => "شحن مجاني",
{ Country: "SA" } => "15 ريال",
{ Total: >= 200 } => "شحن مجاني دولي",
_ => "25 ريال"
};
case guard بـ when
عندما لا يكفي النمط وحده وتحتاج شرطًا إضافيًا:
string Classify(int x) => x switch
{
int n when n < 0 => "سالب",
0 => "صفر",
int n when n % 2 == 0 => "زوجي موجب",
_ => "فردي موجب"
};
دمج الأنماط: and / or / not
bool IsVowel(char c) => c is 'a' or 'e' or 'i' or 'o' or 'u';
bool InRange(int n) => n is >= 1 and <= 100;
bool NotNull(object? o) => o is not null;
💡 المترجم يحذّرك إذا لم يغطِّ تعبير
switchكل الاحتمالات — أضف ذراع_دائمًا لضمان الشمولية.
🎯 التالي: الأنواع القياسية (Records).