8 ответов:
единственный способ иметь переменную, которой не было присвоено значение в C# , - это быть локальной переменной , и в этом случае во время компиляции вы можете сказать, что она определенно не назначена, пытаясь прочитать из нее :)
Я подозреваю, что вы действительно хотите
Nullable<DateTime>(илиDateTime?с синтаксическим сахаром C#) - make itnullдля начала, а затем назначить нормальныйDateTimeзначение (которое будет преобразовано соответствующим образом). Тогда вы можете просто сравнить сnull(или использоватьHasValueсвойство), чтобы увидеть, было ли установлено "реальное" значение.
значит так:
DateTime datetime = new DateTime(); if (datetime == DateTime.MinValue) { //unassigned }или вы можете использовать Nullable
DateTime? datetime = null; if (!datetime.HasValue) { //unassigned }
положите это где-нибудь:
public static class DateTimeUtil //or whatever name { public static bool IsEmpty(this DateTime dateTime) { return dateTime == default(DateTime); } }затем:
DateTime datetime; if (datetime.IsEmpty()) { //unassigned }
DateTime-это тип значения, поэтому он никогда не может быть нулевым. Если вы думаете, что дата и время? ( Обнуляемого ) вы можете использовать:
DateTime? something = GetDateTime(); bool isNull = (something == null); bool isNull2 = !something.HasValue;
Я только что узнал, что GetHashCode() для неназначенного datetime всегда равен нулю. Я не уверен, что это хороший способ проверить null datetime, потому что я не могу найти никакой документации о том, почему это поведение отображается.
if(dt.GetHashCode()==0) { Console.WriteLine("DateTime is unassigned"); }
Я бы сказал, что значение по умолчанию-всегда
new DateTime(). Так что мы можем написатьDateTime datetime; if (datetime == new DateTime()) { //unassigned }
Я обычно предпочитаю, где это возможно, использовать значение по умолчанию типов значений, чтобы определить, были ли они установлены. Это, очевидно, не возможно все время, особенно с ints - но для DateTimes, я думаю, что резервирование MinValue для обозначения того, что оно не было изменено, достаточно справедливо. Преимущество этого над nullables заключается в том, что есть еще одно место, где вы получите исключение null reference (и, вероятно, много мест, где вам не нужно проверять null перед доступом это!)
Comments