4

フォームに記入するには提出txtb_dateOfServiceが必要ですが、emapty の場合txtb_dateOfServiceは null を返します。TryParse でない場合は、>このエラーが発生した日付を修正する方法がわかりません

'System.DateTime.TryParse(string, out System.DateTime)' に最も一致するオーバーロードされたメソッドには、いくつかの無効な引数があります

    DateTime? dateOfService= null;
    if (string.IsNullOrEmpty(txtb_dateOfService.Text))
    {
        dateOfService = null;

    }
    else
        if (DateTime.TryParse(txtb_dateOfService.Text, out dateOfService))
        {

        }
4

6 に答える 6

6

DateTime?への参照をを期待するメソッドに渡すことはできませんDateTime。次のように、一時変数を導入することでこれを解決できます。

else { // <<=== This is the final "else" from your code
    DateTime tmp;
    if (DateTime.TryParse(txtb_dateOfService.Text, out tmp))
    {
        dateOfService = tmp;
    } else {
        dateOfService = null;
    }
}
于 2013-01-03T17:59:47.010 に答える
1

あなたの問題は への変換DateTime?DateTimeあり、その逆ではありません。DateTime.TryParseメソッドのパラメーターoutは null 可能ではありません。イベントTryParseが失敗した場合、out パラメータがDateTime.MinValueその値として割り当てられます。dateOfServiceこのスニペットから、変数を null 許容型として宣言する理由はありません。

于 2013-01-03T18:00:48.793 に答える
1

解析が失敗した場合は、例外をスローできます。

DateTime? dateOfService= null;
if (string.IsNullOrEmpty(txtb_dateOfService.Text))
{
    dateOfService = null;
}
else
{
    // will throw an exception if the text is not parseable
    dateOfService = DateTime.Parse(txtb_dateOfService.Text);  
}

または、中間の DateTime を使用して解析結果を保存します。

DateTime? dateOfService= null;
if (string.IsNullOrEmpty(txtb_dateOfService.Text))
{
    dateOfService = null;

}
else
{
    DateTime temp;
    if (DateTime.TryParse(txtb_dateOfService.Text, out temp))
    {
        dateOfService = temp;
    } 
    else 
    {
        dateOfService = null;
    }
}

これらはどちらも論理的に単純化できます。論理を伝えるために完全なブレークアウトを示しています。

于 2013-01-03T18:01:57.700 に答える
0

dateOfService.Value を試してみてください。これでうまくいくはずです (と思います)。

于 2013-01-03T18:19:10.733 に答える
0

stringあなたはであなたを変換しようとすることができますDateTime

DateTime? dataOfService = null;
DateTime output;

if (DateTime.TryParse(txtb_dateOfService.Text, out output))
   dataOfService = output;

dataOfServiceasを使用して、およびプロパティNullable<DateTime>を使用して変換された有効なデータがあるかどうかを確認できるようになりました。HasValueValue

于 2013-01-03T18:02:45.060 に答える
0

の出力パラメーターを保持するために一時値を作成する必要がありますTryParse

DateTime tmp;
if (DateTime.TryParse(txtb_dateOfService.Text, out tmp)) {
    dateOfService = tmp;
} else{
    dateOfService = null;
}

より簡潔な例

DateTime tmp;
DateTime? dateOfService = DateTime.TryParse(txtb_dateOfService.Text, out tmp)
   ? tmp
   : (DateTime?)null;
于 2013-01-03T18:02:51.833 に答える