2011-12-01 21 views
8

がどのように私は変換文字列

string date = "12/2/2011"; 

DateTime? dt = date ?? DateTime.Parse(date); 

を書くことができ、これはコンパイル時にエラーがスローされます。私はtryparse or do if {}をすることができます知っています。これを1行で行う方法はありますか?

+1

あなたに余分な疑問符があります。これは 'DateTime? dt =日付? DateTime.Parse(date):null; ' – dasblinkenlight

+0

申し訳ありません、今までの質問を編集しましたか? DateTime.Parse(date)from date? null:DateTime.Parse(date) –

+2

いいえ、C#は?をサポートしていますか? (Groovyのelvis演算子と呼ばれます)。値がnullの場合にのみ右側の値を返し、それ以外の場合は値自体を返します。 – everton

答えて

25

ではなくnull-coalescing operator??conditional operator?:を使用してみてください:

DateTime? dt = date == null ? (DateTime?)null : DateTime.Parse(date); 

またそうしないと、コンパイルエラーになりますDateTime?にヌルをキャストする必要があります。

1
string date = "12/2/2011"; 
date = Convert.ToDateTime(date); 
3
string date = "12/2/2011"; 

DateTime? dt = String.IsNullOrEmpty(date) ? (DateTime?)null : DateTime.Parse(date); 
2

文字列datenullまたは空の文字列であるとき、また、それは無効な日付表現が含まれている場合、このソリューションは、NULL可能日時dtnullが割り当てられていないだけで:

string date = null; // or "01/02/2011" 
DateTime? dt; 

DateTime temp; 
if (DateTime.TryParse(date, out temp)) { 
    dt = temp; 
} else { 
    dt = null; 
} 

if-else文は1行3進表現で置き換えることができますが、宣言はtemp

ではありません
DateTime temp; 
dt = DateTime.TryParse(date, out temp) ? temp : (DateTime?)null; 
+0

Downvoterはコメントしてください。私のソリューションで何が問題になっていますか?日付がnullの場合だけでなく、有効な日付文字列が含まれていない場合も検出されます。また、dtにはNULLを指定できることに注意してください。 –

+0

dtは最初からヌルなので、あなたの 'else'ステートメントには理由がありません。 – everton

+0

@EvertonAgner: 'dt'がメンバ変数である場合のみ、ローカル変数ではありません。質問で与えられた例から、 'dt 'がクラスで定義されているのか、メソッドで定義されているのかは分かりません。 –