[英]Allow null DateTime? variable comparison with DateTime variable in C#
[英]C# newbie with DateTime variable I want to set to null
我有一個帶有DateTime變量的輸出數據類。 我想在加載器類中將其清除為空值,但編譯器會抱怨:
無法將null轉換為'System.Data.Time',因為它是一個不可為空的值類型。
我理解,但如果我將類型更改為DateTime? 創建可空類型包裝器我得到:
方法'ToString'的重載沒有'1'參數
我有一個讀取的輸出行。
ACCOUNT_ESTABLISHED_DATE.ToString( “YYYY-MM-DD”)
所以問題是,當我將DateTime設置為可空時,如何解決不再像具有格式化ToString的DateTime那樣的事實?
使用其Value屬性,如下所示:
DateTime? dt = DateTime.Now; // or whatever
MessageBox.Show(dt.Value.ToString(...));
嘗試
ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd")
您需要使用可空類型的“Value”屬性訪問實際值。
您應該確保'Value'包含首先測試ACCOUNT_ESTABLISHED_DATE.HasValue屬性的內容。
HTH
每當你包裝Nullable<>
(你正在使用DateTime?
做什么DateTime?
)時,你需要做obj.Value.ToString()
。
你在找嗎?
DateTime? dt = new DateTime();
要么
Nullable<DateTime> dt = new DateTime();
ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd");
你應該寫:
ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd")
.NET沒有開箱即用的方法。 您需要一個輔助方法,如:
public string Format(DateTime? date, string format)
{
if (date == null)
return string.Empty;
return date.Value.ToString(format);
}
甚至更好, DateTime?
的擴展方法DateTime?
:
public static class DateTimeExtensionMethods
{
public static string ToString(this DateTime? date, string format)
{
if (date == null)
return string.Empty;
return date.Value.ToString(format);
}
}
然后,要使用擴展方法,只需使用問題中的代碼,並確保將DateTimeExtensionMethods
的命名空間導入到您的類中。
string strDate = string.Empty;
if(ACCOUNT_ESTABLISHED_DATE != null)
{
strDate = ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd");
}
or you can use null collacing operator
DateTime newDate = ACCOUNT_ESTABLISHED_DATE ?? new Date();
newDate.ToString("yyyy-MM-dd");
你必須使用
dt.HasValue ? dt.Value.ToString("...") : dt.ToString();
這是因為Nullable<T>
本身就是一個合適的類型,其ToString()
方法已經很好地完成了,因為它很好地處理了null
情況。 但是要獲取底層的非可空對象,您必須使用Value
屬性。 但是你必須自己檢查null
(或HasValue
)。
DateTime? date = getSomeDate();
if (date != null) {
date.Value.ToString("yyyy-MM-dd");
}
你有沒有看過將DateTime設置為DataTime.MinValue?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.