簡體   English   中英

將“null”值賦給Nullable <DateTime> 單行“如果”

[英]Assigning `null` value to Nullable<DateTime> with single line 'if'

我有一個像這樣的班級

public class MyClass
{
    public int Id { get; set; }
    public Nullable<DateTime> ApplicationDate { get; set; }
    ....
}

現在我正試圖像這樣填充MyClass的對象

DataTable dt = DBHelper.GetDataTable(sql, conn);
DataRow dr = dt.Rows[0];

MyClass oMyClass = new MyClass();
oMyClass.Id = (int)dr["Id"];
oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? null : Convert.ToDateTime(dr["AppDate"]); 
//Above line gives an error
....

分配應用程序日期值會出錯

Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'System.DateTime'

我在這里錯過了什么?

你需要將nullDateTime?

oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value 
    ? (DateTime?)null 
    : Convert.ToDateTime(dr["AppDate"]); 

這是因為編譯器確定條件運算符的結果類型的方式; 行為是設計的:

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

由於null本身是null類型 ,因此沒有轉換或來自它,你需要通過強制轉換來幫助編譯器。

oMyClass.ApplicationDate =
    dr["ApplDate"] == DBNull.Value ?
    (DateTime?)null :
    Convert.ToDateTime(dr["AppDate"]);

所有編譯器都知道,一件事評估為null而另一件評估為DateTime 編譯器抱怨,因為它無法從一個轉換為另一個,因此您可以將它們轉換為可以同時為值的東西。

注意DateTime? Nullable<DateTime>縮寫。
另請注意,您只需要轉換null值,因為DateTime?之間存在隱式轉換DateTime? DateTime所以編譯器可以自己進行轉換。

嘗試這個:

oMyClass.ApplicationDate = 
    dr["ApplDate"] == DBNull.Value ? (DateTime?)null : 
                                     Convert.ToDateTime(dr["AppDate"]); 

您還可以將強制轉換應用於最后一個表達式。

您需要將“null”轉換為Nullable

試試這段代碼:

oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["AppDate"]);

您可以使用default值來指定未初始化類型的默認值。

oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? default(Nullable<DateTime>) : Convert.ToDateTime(dr["AppDate"]); 

更多例子

bool isHappy = default(bool); //isHappy = false
int number = default(int); //number = zero
string text = default(text); // text = null
MyObject myObject = default(MyObject); // myObject = null
DateTime? date = default(DateTime?); //date = null
DateTime? dt = (DateTime?)null;

要么

Nullable<DateTime> dt = (Nullable<DateTime>)null;

暫無
暫無

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

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