0Pricing
C# Academy · درس

خاصيتا HasValue وValue

افحصوا القيم القابلة للإفراغ ووصِلوا إليها بأمان

خاصيتا HasValue وValue درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

خاصيتان أساسيتان

يعرِض كل نوع قابل للقيمة null الخاصيتين HasValue، وهي قيمة منطقية، وValue، وهي القيمة الأساسية. وهما الأداتان اللتان تستخدمهما لفحصه بأمان.

using System;

class Program {
    static void Main() {
        int? n = 5;
        Console.WriteLine(n.HasValue);
        Console.WriteLine(n.Value);
    }
}

تتحقق HasValue من وجود قيمة

تكون HasValue مساوية لـtrue عند وجود قيمة حقيقية، ومساوية لـfalse عندما تكون القيمة null.

using System;

class Program {
    static void Main() {
        int? a = 10;
        int? b = null;
        Console.WriteLine(a.HasValue);
        Console.WriteLine(b.HasValue);
    }
}

قراءة Value بأمان

تحقق دائمًا من HasValue قبل قراءة Value، لأن قراءة Value عندما تكون القيمة null تؤدي إلى استثناء.

using System;

class Program {
    static void Main() {
        int? n = 42;
        if (n.HasValue) {
            Console.WriteLine(n.Value * 2);
        }
    }
}

الوصول إلى Value عندما تكون null يؤدي إلى استثناء

إذا قرأت Value عندما تكون القيمة القابلة للقيمة null تساوي null، فإن C# تُطلِق InvalidOperationException. ويحميك التحقق من ذلك.

using System;

class Program {
    static void Main() {
        int? n = null;
        try {
            Console.WriteLine(n.Value);
        } catch (InvalidOperationException) {
            Console.WriteLine("Caught: no value");
        }
    }
}

GetValueOrDefault

تعيد GetValueOrDefault() القيمة إذا كانت موجودة، وإلا تعيد القيمة الافتراضية للنوع، مثل 0 للنوع int وfalse للنوع bool.

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault());
    }
}

GetValueOrDefault مع قيمة بديلة

مرّر وسيطًا لاختيار القيمة البديلة الخاصة بك: تعيد GetValueOrDefault(99) القيمة 99 عندما تكون القيمة null.

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault(99));
        int? m = 7;
        Console.WriteLine(m.GetValueOrDefault(99));
    }
}

النمط: تحقّق ثم استخدم

يجمع نمط شائع بين HasValue وValue داخل فرع واضح.

using System;

class Program {
    static void Describe(int? score) {
        if (score.HasValue)
            Console.WriteLine("Score is " + score.Value);
        else
            Console.WriteLine("No score yet");
    }
    static void Main() {
        Describe(88);
        Describe(null);
    }
}

التحويل الضمني مرة أخرى

يمكنك إسناد قيمة قابلة للقيمة null إلى نوع عادي فقط بعد التأكد من أنها تحتوي على قيمة، ثم قراءة Value.

using System;

class Program {
    static void Main() {
        int? maybe = 15;
        if (maybe.HasValue) {
            int real = maybe.Value;
            Console.WriteLine(real + 5);
        }
    }
}

القيمة الافتراضية للنوع القابل للقيمة null

تكون القيمة الافتراضية للنوع القابل للقيمة null، إذا لم تُحدَّد صراحةً، هي null؛ لذلك تكون HasValue مساوية لـfalse.

using System;

class Program {
    static void Main() {
        int? n = default;
        Console.WriteLine(n.HasValue);
    }
}

الاستخدام في عمليات التجميع

كرّر على البيانات، وتجاوز القيم null باستخدام HasValue، لحساب مجاميع آمنة.

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5, null, 8 };
        int sum = 0;
        foreach (var r in readings)
            if (r.HasValue) sum += r.Value;
        Console.WriteLine(sum);
    }
}

استخدام GetValueOrDefault في الحلقات

يمكن أن يبسّط GetValueOrDefault التعليمات البرمجية عندما ينبغي التعامل مع القيمة null على أنها صفر.

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5 };
        int sum = 0;
        foreach (var r in readings)
            sum += r.GetValueOrDefault();
        Console.WriteLine(sum);
    }
}

اختبار سريع

اختبر معرفتك بخصائص الأنواع القابلة للقيمة null.

مراجعة

تخبرك HasValue بما إذا كانت القيمة القابلة للقيمة null تحتوي على قيمة، وتستخرجها Value، لكن قراءة Value عندما تكون القيمة null تؤدي إلى استثناء.

تعيد GetValueOrDefault() القيمة بأمان أو تعيد قيمة بديلة، سواء كانت القيمة الافتراضية للنوع أو قيمة توفرها أنت، مما يجعلها مثالية للمجاميع والقراءات الآمنة.

الأسئلة الشائعة

هل درس «خاصيتا HasValue وValue» مجاني؟

نعم — نص درس «خاصيتا HasValue وValue» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «خاصيتا HasValue وValue»؟

افحصوا القيم القابلة للإفراغ ووصِلوا إليها بأمان تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «خاصيتا HasValue وValue»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التعرّف على أنواع القيم القابلة للإفراغ
  2. خاصيتا HasValue وValue
  3. عوامل الدمج عند null
  4. القيم القابلة للإفراغ في العمليات الحسابية
← العودة إلى C# Academy