2009-09-18 17 views
30

に私はDateTime?変数を持って、時には値は値がnullnullDateTime値であるとき、私は空の文字列""返すことができるか、nullのですか?C#のNullable <DateTime>文字列

答えて

32
string date = myVariable.HasValue ? myVariable.Value.ToString() : string.Empty;
+0

私は –

+11

何を探していたまさに、ありがとう! Nullable インスタンスで.ToString()を呼び出すと、String.Emptyを取得できます。 Eric Lippert(この行動を実装した可能性もあります)でもこれに注意しています。 _それは受け入れられた答えでなければなりません。 – codekaizen

+1

@codekaizen - 私はそれを試してみると例外が発生します。そうではありません、それは受け入れられた答えではありません。おそらく、最近のバージョンのC#や.netではこれは問題ではないでしょうか? –

1
DateTime? MyNullableDT; 
.... 
if (MyNullableDT.HasValue) 
{ 
    return MyNullableDT.Value.ToString(); 
} 
return ""; 
2
DateTime? d; 
// stuff manipulating d; 
return d != null ? d.Value.ToString() : String.Empty; 
1
if (aDate.HasValue) 
    return aDate; 
else 
    return string.Empty; 
1
DateTime d?; 
string s = d.HasValue ? d.ToString() : string.Empty; 
7

あなたが拡張メソッド

実際
public static string ToStringSafe(this DateTime? t) { 
    return t.HasValue ? t.Value.ToString() : String.Empty; 
} 

... 
var str = myVariable.ToStringSafe(); 
+4

また、それは一般的です: 'public static string ToSafeString (this T?obj)T:struct' :) – JulianR

+0

聖なる煙は、.NETがこの能力を持っていることを知らなかった! – tster

16

を書くことができ、これは値なしで、彼らは何も返さないことを、Null許容型のデフォルトの動作です:

public class Test { 
    public static void Main() { 
     System.DateTime? dt = null; 
     System.Console.WriteLine("<{0}>", dt.ToString()); 
     dt = System.DateTime.Now; 
     System.Console.WriteLine("<{0}>", dt.ToString()); 
    } 
} 

これは、これらの答えの多くは正しいが、それらのすべてが不必要に複雑であり

<> 
<2009-09-18 19:16:09> 
+3

+1これを知らなかった。ただし、この方法で書式設定文字列を指定することはできません。 –

+0

右。この場合、これは問題ではないかもしれませんが。しかし、私は昨日までこれを知らなかった。あなたがReflectorで 'Nullable 'を見たときに見つけた:-) – Joey

87

得られます。 値が論理的にnullの場合、null可能なDateTimeでToStringを呼び出した結果は、すでに空の文字列です。あなたの値でToStringを呼び出すだけです。それはあなたが欲しいものを正確に行います。

+3

'.Day'' .Week'のようなDateTimeプロパティを使用しないと、DateTime文字列全体が与えられ、DateTimeクラスの能力を失うためです。例えば'myVariable.Value.Hour。ToString() 'あなたがそうしたくない理由の例にすぎません。 – baron

+2

@baronでは、それらのプロパティは 'Nullable'ではありません。 – Sam

4

Nullable<T>.ToString()nullとすると、空の文字列が返されます。

0

あなたがする必要があるのは、単に.ToString()と呼ぶだけです。それはnull値のNullable<T>オブジェクトを処理します。ここで

Nullable<T>.ToString()ためsource of .NET Frameworkです:

public override string ToString() { 
    return hasValue ? value.ToString() : ""; 
}