簡體   English   中英

錯誤消息為“字符串未被識別為有效的DateTime。”

[英]Error Message as “String was not recognized as a valid DateTime.”

我的代碼:

DateTime? birthDate = DateTime.Parse(filterDictionary.ContainsKey("DOB") ? filterDictionary["DOB"] : string.Empty);

我收到錯誤消息,因為“字符串未被識別為有效的DateTime。” 如何解決這個問題。 謝謝。

問題(至少其中一個)是您無法將空字符串解析為DateTime

將您的代碼行更改為此,以僅在找到密鑰時才移動解析,並在沒有密鑰時返回null而不是解析:

DateTime? birthDate = filterDictionary.ContainsKey("DOB") ? DateTime.Parse( filterDictionary["DOB"]) : (DateTime?) null;

另一個問題可能是您的字典DOB值實際上無法轉換為DateTime 如果以上代碼不起作用,請在filterDictionary["DOB"]此錯誤時編輯您的問題,並將值發布到filterDictionary["DOB"]

當您使用空字符串顯示DateTime.Parse時,它總是會失敗。

目前尚不清楚,你已經看到了這個時間是否已經一個地方出現字典中的數據,但它是無效的,或者是否存在一直沒有數據,它的解析string.Empty 還請注意, DateTime.Parse返回DateTime ,而不返回DateTime? 如果您想在條目不在字典中的情況下將該值設置為null那么我實際上會使用:

DateTime? birthDate = null;
string dobText;
if (filterDictionary.TryGetValue("DOB", out dobText))
{
    birthDate = DateTime.Parse(dobText);
}

也許:

string dobText;
DateTime? birthDay = filterDictionary.TryGetValue("DOB", out dobText)
    ? DateTime.Parse(dobText) : (DateTime?) null;

請注意,您需要在此處將第二或第三操作數中的至少一個強制轉換為null ,以便編譯器可以計算條件表達式的類型。

您還應該考慮對DateTime.Parse的普通調用是否合適:

  • 如果知道所需的特定格式,請致電DateTime.ParseExact
  • 如果這是用戶輸入 ,則可能應該使用TryParseTryParseExact
  • 如果不是用戶輸入,則可能應該指定CultureInfo.InvariantCulture的解析CultureInfo.InvariantCulture
  • 如果它是用戶在GUI中的直接輸入,是否有一種方法可以避免首先將其作為文本獲得?

暫無
暫無

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

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