سؤال

ويمكن للشخص أن يفسر لماذا يعمل هذا في C # .NET 2.0:

    Nullable<DateTime> foo;
    if (true)
        foo = null;
    else
        foo = new DateTime(0);

و... ولكن هذا لا:

    Nullable<DateTime> foo;
    foo = true ? null : new DateTime(0);

وهذا الشكل الأخير يعطيني ترجمة خطأ "نوع من التعبير الشرطي لا يمكن تحديده لأنه لا يوجد التحويل الضمني بين '" و "System.DateTime".

وهذا لا يعني أنني لا يمكن استخدام السابق، ولكن الاسلوب الثاني هو أكثر اتساقا مع بقية قانون بلدي.

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

المحلول

تم طلب هذا السؤال حفنة من الأوقات بالفعل. المترجم أقول لك أنه لا يعرف كيف تحويل null إلى DateTime.

والحل بسيط:

DateTime? foo;
foo = true ? (DateTime?)null : new DateTime(0);

لاحظ أن Nullable<DateTime> يمكن كتابة DateTime? الذي سيوفر لك حفنة من الكتابة.

نصائح أخرى

ومعلوماتك (Offtopic، ولكن أنيق وتتعلق أنواع nullable) لدينا مشغل مفيد فقط لأنواع nullable دعا المشغل التحام باطل

??

ويستخدم مثل هذا:

// Left hand is the nullable type, righthand is default if the type is null.
Nullable<DateTime> foo;
DateTime value = foo ?? new DateTime(0);

وذلك لأن في شركة الثلاثي، يجب أن القيمتين حل لنفس النوع.

وحل آخر مماثل لالمقبول هو استخدام C # الصورة <لأ href = "http://msdn.microsoft.com/en-us/library/xwth0h0d٪28v=vs.100٪29.aspx" يختلط = "نوفولو noreferrer "> default الكلمة. في حين يعرف استخدام الأدوية، فإنه ينطبق في الواقع على أي نوع.

والاستخدام مثال ينطبق على سؤال OP و:

Nullable<DateTime> foo;
foo = true ? default(DateTime) : new DateTime(0);

والاستخدام مثال مع الإجابة المقبولة الحالية:

DateTime? foo;
foo = true ? default(DateTime) : new DateTime(0);

وأيضا، باستخدام default، لا تحتاج إلى تحديد المتغير كما nullable من أجل تعيينه قيمة null. سوف مترجم لصناعة السيارات في تعيين القيمة الافتراضية للمتغير معين من نوع، وسوف يكون واجه أي خطأ. مثال:

DateTime foo;
foo = true ? default(DateTime) : new DateTime(0);

وأنا أعلم سئل هذا السؤال في عام 2008 وهي الآن بعد 5 سنوات ولكن الجواب وضع علامة كإجابة لا يرضي لي. الجواب الحقيقي هو أن التاريخ والوقت هو البنية، ونتيجة لبنية أنه غير متوافق مع اغية. لديك طريقتان للحل ما يلي:

والأول هو لجعل متوافق اغية مع التاريخ والوقت (على سبيل المثال، ويلقي اغية إلى التاريخ والوقت؟ كما الرجل مع 70 upvotes يوحي، أو يلقي اغية إلى كائن أو ValueType).

والثاني هو لجعل التاريخ والوقت متوافقة مع فارغة (على سبيل المثال، ويلقي التاريخ والوقت إلى التاريخ والوقت؟).

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