私のコード:
DateTime? birthDate = DateTime.Parse(filterDictionary.ContainsKey("DOB") ? filterDictionary["DOB"] : string.Empty);
「文字列が有効な日時として認識されませんでした」というエラーメッセージが表示されます。この問題を解決する方法。ありがとう。
問題(少なくとも1つ)は、空の文字列をに解析できないことですDateTime
。
コードの行を次のように変更して、キーが見つかった場合にのみ解析を移動し、キーがない場合は解析ではなくnullを返します。
DateTime? birthDate = filterDictionary.ContainsKey("DOB") ? DateTime.Parse( filterDictionary["DOB"]) : (DateTime?) null;
もう1つの問題は、辞書のDOB値を実際にに変換できないことDateTime
です。上記のコードが機能しない場合は、質問を編集して、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
コンパイラが条件式の型を計算できるように、ここに2番目または3番目のオペランドの少なくとも1つをキャストする必要があることに注意してください。
また、への単純な呼び出しDateTime.Parse
が適切かどうかを検討する必要があります。
DateTime.ParseExact
TryParse
またはを使用する必要がありますTryParseExact
CultureInfo.InvariantCulture