Czy istnieje łatwy sposób w C#, aby sprawdzić, czy instancja DateTime została przypisana wartość, czy nie?Sprawdzanie, czy zmienna DateTime ma przypisaną wartość
Odpowiedz
Jedynym sposobem na posiadanie zmiennej, której nie przypisano wartości w C#, jest jej zmienna lokalna - w tym przypadku w czasie kompilacji można stwierdzić, że nie jest ona definitywnie przypisana przez próbę odczytać z niego :)
podejrzewam naprawdę chcesz Nullable<DateTime>
(lub DateTime?
z cukrem składniowej C#) - sprawiają, że null
zacząć, a następnie przypisać wartość normalną DateTime
(które zostaną zamienione odpowiednio). Następnie można po prostu porównać z null
(lub użyć właściwości HasValue
), aby sprawdzić, czy została ustawiona "prawdziwa" wartość.
Użyj Nullable<DateTime>
, jeśli to możliwe.
DateTime jest typem wartości, więc nie może nigdy mieć wartości NULL. Jeśli uważasz, że DateTime? (Nullable) można użyć:
DateTime? something = GetDateTime();
bool isNull = (something == null);
bool isNull2 = !something.HasValue;
masz na myśli tak:
DateTime datetime = new DateTime();
if (datetime == DateTime.MinValue)
{
//unassigned
}
lub można używać pustych
DateTime? datetime = null;
if (!datetime.HasValue)
{
//unassigned
}
Tylko druga z nich jest kuloodporne. Pierwsze zakłada coś o unset reprezentacja DateTime, które nie jest gwarantowane przez framework.My osobiście myślę, że powinny one zostały dodane Unset statyczny członek dla tego scenariusza. –
Aby dodać, co powiedział @RupertRawnsley, powinieneś porównać z wartością domyślną (DateTime), która jest wartością nieprzypisanego obiektu DateTime. Tak się składa, że jest równa wartości MinValue, ale może się zmienić. –
ja generalnie wolę, gdzie jest to możliwe, aby korzystać z domyślnego wartość typów wartości, aby określić, czy zostały ustawione. To oczywiście nie jest możliwe cały czas, szczególnie z ints - ale dla DateTimes, myślę, że zarezerwowanie MinValue do oznaczenia, że nie zostało zmienione, jest sprawiedliwe. Zaletą tej sytuacji jest to, że istnieje jedno miejsce, w którym uzyskasz zerowy wyjątek odwołania (i prawdopodobnie wiele miejsc, w których nie musisz sprawdzać wartości zerowej przed uzyskaniem dostępu do niej!)
Właśnie się dowiedziałem że GetHashCode() dla nieprzypisanej daty i godziny jest zawsze zero. Nie jestem pewien, czy jest to dobry sposób na sprawdzenie zerowej datetime, ponieważ, nie mogę znaleźć dokumentacji na temat przyczyny tego zachowania.
if(dt.GetHashCode()==0)
{
Console.WriteLine("DateTime is unassigned");
}
'GetHashCode' zwraca 0, ponieważ tyknięcia (wewnętrzna reprezentacja DateTime) są równe 0. Kod skrótu obliczany w następujący sposób:' niezaznaczone ((int) ticks)^(int) (ticks >> 32); '. Zobacz także: http://referencesource.microsoft.com/#mscorlib/system/datetime.cs,836 –
Powiedziałbym, że domyślną wartością jest zawsze new DateTime()
. Tak więc możemy napisać
DateTime datetime;
if (datetime == new DateTime())
{
//unassigned
}
To rozwiązanie zostało już przekazane przez firmę + Hath w 2008 roku i, jako + Rupert Rawnsley dodany jako komentarz, nie jest kuloodporne ... –
umieścić to gdzieś:
public static class DateTimeUtil //or whatever name
{
public static bool IsEmpty(this DateTime dateTime)
{
return dateTime == default(DateTime);
}
}
następnie:
DateTime datetime;
if (datetime.IsEmpty())
{
//unassigned
}
- 1. AS3: Sprawdzanie czy zmienna jest typu Object
- 2. Czy można sprawdzić, czy zmienna js ma wartość d3?
- 3. Zmienna ma wartość bez przypisania C++
- 4. Ustaw pusty DateTime zmienna
- 5. Wykryj, czy zmienna jest obiektem datetime
- 6. Sprawdzanie, czy zmienna POST [] jest adresem IP?
- 7. Sprawdzanie, czy zmienna jest liczbą całkowitą
- 8. Sprawdzanie, czy zmienna jest typu danych podwójne
- 9. Sprawdzanie czy zmienna istnieje w javascript
- 10. Sprawdzanie, czy zmienna jest pusta C#
- 11. Czy zmienna static constexpr ma sens?
- 12. Porównaj Nullable zmienna DateTime dla wartości domyślnej
- 13. Sprawdzanie, czy użytkownik Django ma ustawione hasło
- 14. Sprawdzanie, czy mysqli_query nie ma wartości?
- 15. jquery Sprawdzanie, czy element ma element
- 16. Sprawdź, czy Html.ValidationSummary() ma wartość
- 17. Dlaczego domyślnie zmienna typu Integer ma wartość NULL?
- 18. Wiosenna zmienna @Autowired ma wartość null wewnątrz @Component
- 19. Dlaczego operator przypisania zwraca przypisaną wartość w języku C#?
- 20. Sprawdzanie, czy podwójna wartość jest liczbą całkowitą - Swift
- 21. Sprawdzanie czy wartość float jest NaN
- 22. mvc 4 IEnumerable sprawdzanie czy jego wartość zerowa
- 23. sprawdzanie poprawności jquery - ważne, jeśli pole ukryte ma wartość
- 24. Ustawienie SQL Server 2008 zmienna DateTime
- 25. Sprawdzanie, czy jakakolwiek komórka DataGrid WPF ma błąd
- 26. Sprawdzanie, czy tablica ma niektóre elementy w coffeescript
- 27. Wartość datetime-local z React
- 28. Sprawdzanie PHP na przykład z DateTime?
- 29. Jak sprawdzić, czy zmienna ma wartość NULL, a następnie ustawić ją za pomocą procedury składowanej MySQL?
- 30. Jak sprawdzić, czy zmienna ma parzystą (nieparzystą) wartość liczbową w bash?
jak o sprawdzenie, czy wartość jest równa wartości domyślnej datetime. Czy istnieje jakieś niezauważalne wady tego podejścia? if (request.StartDateTime == default (DateTime) {request.StartDateTime = DateTime.Now;} – Menol
@Menol: To nie odróżnia pola, któremu celowo nadano wartość 'default (DateTime) 'i jeden, który był właśnie w ten sposób na początek.Zasadniczo traktuje jedną wartość w domenie jako" specjalne i niedostępne do normalnego użytkowania ", które nie lubię –