2012-01-26 6 views
5

はので、私は私が作成したこのNULL可能変数を持っています。DateTime.TryParseはnull可能なDateTimeを受け入れませんか?</p> <pre><code>private DateTime? _startDate; </code></pre> <p>私は日時に、いくつかの変数を解析して、この変数に代入したかったが、VSは<code>TryParse</code>方法は、いくつかの無効な引数を持っていると文句を言い:

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false) 
     { 
      DateTime.TryParse(Request.Form["StartDate"], out _startDate); 
     } 
     else 
     { _startDate = null; } 

nullがある変数は使用できませんか?

答えて

10

いいえ、DateTime?DateTime?が本当にNullable<DateTime> - 互換性のないタイプなのでDateTime?を受け付けません。

代わりにこれを試してみてください:

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false) 
    { 
     var dtValue = new DateTime(); 
     if (DateTime.TryParse(Request.Form["StartDate"], out dtValue)) { 
      _startDate = dtValue; 
     } 
     else { 
      _startDate = null; 
     } 
    } 
    else 
    { _startDate = null; } 
+0

本当にnullまたは空のチェックの必要がないことを – Victor

+2

注意は、優秀な答えをありがとう - DateTime.TryParseは、このブロックを少し簡略化する可能性がある、あなたのためにこれを行います。 –

+0

@ReedCopseyはい、良い点です。必要な部分は、IsNullOrEmpty(...)の現在のチェックの後の条件の真の部分だけです。 – Yuck

0

DateTime?DateTimeoutに関連するさまざまな非互換タイプです。ですから、あなたはDateTimeを使い、Yuckの答えのように値をコピーする必要があります。

11

他の人は言っているように、互換性のあるタイプではありません。私はあなたがDateTime.TryParse戻りNullable<DateTime>を包む新しいメソッドを作成することをお勧め:

次に、あなただけ使用することができます。

_startDate = Helpers.TryParseNullableDateTime(Request.Form["StartDate"]); 

nullまたは空の文字列をチェックする(必要がありません。TryParseその場合はfalseと返されます)。

+1

Jon !!あなたのファンです! –

+0

ありがとう、素晴らしい提案 – Victor

+0

+1「Nullable 」クラスに追加したいものがあります。 – Yuck

0

コードは次のとおりです。例外が処理されました。

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false) 
     { 
      DateTime strtDate; 
      try 
       { 
       strtDate = Convert.ToDateTime(Request.Form["StartDate"]); 
       _startDate = strtDate; 
       } 
      catch(Exception) 
       { 
       _startDate = null; 
       } 
     } 
     else 
     { 
     _startDate = null; 
     } 
関連する問題

 関連する問題