簡體   English   中英

C#中可為空的DateTime

[英]Nullable DateTime in C#

我有兩個與DateTime評估有關的問題

DateTime? y = 1 == 1 ? null: DateTime.MaxValue;
DateTime? y = null; // assignment works as expected
  • 為什么第一次分配會在nullDateTime?之間產生類型轉換錯誤DateTime?
  • 哪種方式首選的DateTime?空分配DateTime? 在C#中。

     DateTime? x = default(DateTime?); //prints null on console DateTime? x = null; // prints null on console DateTime? x = DateTime.MinValue; //print 01/01/0001 

第二條語句DateTime? y = null; DateTime? y = null; 只是將null分配給可為空的對象。

第一個是條件賦值,它為真實狀態賦值,為假賦值。 在這里,您使用條件運算符來評估條件。 根據MSDN, first_expression (如果為true 執行)second_expression * (如果為false,則執行)*必須是同一類型,或者必須存在從一種類型到另一種類型的隱式轉換。 在我們的情況下,兩者是不同的,因此簡單的解決方案是進行如下所示的顯式轉換:

DateTime? y = 1 == 1 ?(DateTime?) null : DateTime.MaxValue;

A1。 因為在三元運算符中,兩個表達式/結果都應為同一類型。

累積 到MSDN Either the type of first_expression and second_expression must be the same, or an implicit conversion must exist from one type to the other.

在您的問題中, nullDateTime.MinValue不匹配,因此conversion between null and DateTime進行錯誤conversion between null and DateTime

你可以做

DateTime? y = 1 == 1 ? null : (DateTime?)DateTime.MaxValue;

這樣,兩個答案都將返回類型為DateTime?的答案DateTime?

A2。 通常,沒有分配這種/首選方法。 這取決於用戶慣例。 這三個都很好,並且取決於用戶要求。

因為?:運算運算符期望兩側都相同。

first_expression和second_expression的類型必須相同,或者必須存在從一種類型到另一種類型的隱式轉換。

因此解決方案將如下所示:

DateTime? y = 1 == 1 ? (DateTime?)null : DateTime.MaxValue;

對於第二個問題,這將是空分配的好方法

DateTime? x = null;

約會時間? y = 1 == 1? null:DateTime.MaxValue;

該語句給出賦值錯誤的原因不是因為對變量的空賦值,而是因為在三元運算符中使用了空賦值,並且當您在此處使用類類型時,三元運算符不會導致您按照以下方式進行此非法操作提到了CLR規范,它可能會給您帶來直接的編譯錯誤。

//Which is the preferred way for null assignments of DateTime? in c#.

DateTime? x = default(DateTime?); //prints null on console

DateTime? x = null; // prints null on console

DateTime? x = DateTime.MinValue; //print 01/01/0001

根據提供的規范和指南,在任何情況下都不應該為類類型分配空值,因此,按照標准,您可以使用最小值(盡管您也可以使用默認值,但是在需要時可能會影響類型轉換)

您提到的第二個。 您需要在Nikhil Agrawal爵士所推薦的這段時間內強制轉換為空值。

三元

  int y = 1;
  DateTime? dt3 = y == 1 ? (DateTime?)null : DateTime.MinValue;

傳統方式

       DateTime? dt3 = null;

        if (y == 1)            
             dt3 = null;            
        else
            dt3 = DateTime.MinValue;

如果要將null轉換為可為null的日期時間,則可以使用

DateTime? dt = (DateTime?)null;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM