18

stringをとして解析したいと思います。DateTime?失敗した場合は、値をに設定しますnull。私がこれを行うために考えることができる唯一の方法は次のとおりですが、それはあまりきれいではないようです。

DateTime temp;
DateTime? whatIActuallyWant = null;
if (DateTime.TryParse(txtDate.Text, out temp)) whatIActuallyWant = temp;

これが唯一の方法ですか?

4

2 に答える 2

33

これはどう:

DateTime? whatIActuallyWant = DateTime.TryParse(txtDate.Text, out temp) ? (DateTime?)temp : null;

これでワンライナーが得られます (残念ながらキャストが必要です。そうしないとDateTime?コンパイルされません) 。nullif

于 2011-10-06T02:47:40.117 に答える
16

この操作を複数回実行する場合は、使いやすさのために単純な拡張メソッドを追加することをお勧めします...

public static class Extensions
{
    public static DateTime? ToDateTime(this string val)
    {
        DateTime temp;
        if (DateTime.TryParse(val, out temp))
            return temp;
        else 
            return null;
    }
}

その後、非常に簡単に使用できます...

DateTime? ret1 = "01/01/2011".ToDateTime();
DateTime? ret2 = myString.ToDateTime();
于 2011-10-06T03:02:10.933 に答える