سؤال

أنا أقرأ كتابًا بتنسيق .Net، وفي أحد أمثلة التعليمات البرمجية يوجد تعريف فئة بهذا الحقل:

private DateTime? startdate

ماذا فعلت DateTime? يقصد؟

هل كانت مفيدة؟

المحلول

منذ DateTime هو struct, ، وليس أ class, ، تحصل على DateTime هدف, ، وليس أ مرجع, ، عندما تقوم بتعريف حقل أو متغير من هذا النوع.

وبنفس الطريقة مثل int لا يمكن null, ، إذا هذا DateTime الكائن لا يمكن أبدا أن يكون null, ، لأنه ليس مرجعا.

إضافة علامة الاستفهام يحولها إلى أ نوع لاغية, ، مما يعنى أيضاً إنها DateTime هدف، أو إنها null.

DateTime? هو السكر النحوي ل Nullable<DateTime>, ، أين Nullable هي نفسها أ struct.

نصائح أخرى

إنه DateTime لاغٍ. ? بعد أن يشير النوع/البنية البدائية إلى أنها النسخة الخالية.

DateTime عبارة عن بنية لا يمكن أن تكون فارغة أبدًا.من MSDN:

يمثل نوع القيمة DateTime التواريخ والأوقات بقيم تتراوح من 12:00:00 منتصف الليل أو 1 يناير 0001 Anno Domini أو A.D.(المعروف أيضًا باسم العصر العام، أو CE) حتى الساعة 11:59:59 مساءً، 31 ديسمبر 9999 م.(م)

DateTime? يمكن أن تكون فارغة ولكن.

أ ? كلاحقة لنوع القيمة يسمح بالتخصيصات الفارغة التي قد تكون مستحيلة.

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

يمثل كائنًا هو نوعه الأساسي هو نوع قيمة يمكن أيضًا تعيينه مرجعًا فارغًا.

هذا يعني أنه يمكنك كتابة شيء مثل هذا:

    DateTime? a = null;
    if (!a.HasValue)
    {
        a = DateTime.Now;
        if (a.HasValue)
        {
            Console.WriteLine(a.Value);
        }
    }

التاريخ والوقت؟ يعادل نحويا ل لاغية <التاريخ والوقت>.

إنه يعادل Nullable< DateTime>.يمكنك إلحاق "؟" إلى أي نوع بدائي أو بنية.

إنه يمنحك بشكل أساسي حالة إضافية للأوليات.يمكن أن تكون قيمة، أو يمكن أن تكون فارغة.يمكن أن يكون مفيدًا في المواقف التي لا يلزم فيها تعيين قيمة.لذلك بدلاً من استخدام datetime.min أو max على سبيل المثال، يمكنك تعيينه خاليًا بحيث لا يمثل أي قيمة.

كما نعلم، DateTime عبارة عن بنية تعني أن DateTime هو نوع قيمة، لذا تحصل على كائن DateTime، وليس مرجعًا لأن DateTime ليس فئة، عندما تعلن عن حقل أو متغير من هذا النوع، لا يمكنك البدء بـ null لأن أنواع القيمة لا تقبل فارغة.بنفس الطريقة التي لا يمكن أن يكون بها int فارغًا.لذلك لا يكون كائن DateTime فارغًا أبدًا، لأنه ليس مرجعًا.

لكن في بعض الأحيان نحتاج إلى متغير أو حقل من أنواع القيم الفارغة، وفي ذلك الوقت نستخدم علامة الاستفهام لجعلها من النوع الفارغ حتى تسمح بالقيمة الفارغة.

على سبيل المثال:-

التاريخ والوقت؟التاريخ = فارغ؛

كثافة العمليات؟intvalue = null;

في الكود أعلاه متغير تاريخ كائن من DateTime أو أنه فارغ.الشيء نفسه بالنسبة للقيمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top