[英]Nullable DateTime in C#
我有兩個與DateTime評估有關的問題
DateTime? y = 1 == 1 ? null: DateTime.MaxValue;
DateTime? y = null; // assignment works as expected
null
和DateTime?
之間產生類型轉換錯誤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.
在您的問題中, null
和DateTime.MinValue
不匹配,因此conversion between null and DateTime
進行錯誤conversion between null and DateTime
。
你可以做
DateTime? y = 1 == 1 ? null : (DateTime?)DateTime.MaxValue;
這樣,兩個答案都將返回類型為DateTime?
的答案DateTime?
。
A2。 通常,沒有分配這種/首選方法。 這取決於用戶慣例。 這三個都很好,並且取決於用戶要求。
約會時間? 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.