تخطَّ إلى المحتوى

#️⃣ شرح C#

المطابقة النمطية (Pattern Matching)

الدرس 26 من 28· ⏱ 2 دقائق قراءة

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).

شرح المطابقة النمطية (Pattern Matching) — C# بالعربي
المطابقة النمطية (Pattern Matching)C# بالعربي · The Code Fix

📚 لمزيد من التعمّق في C#، راجِع توثيق C# من Microsoft.

هل كان هذا الدرس مفيدًا؟