0

無効または空の日付入力を処理しようとすると、Nullable 日付でこの課題が発生します

通常のDateTime変数の場合、これを行うことができます

DateTime d = new DateTime.Now; //You can also use DateTime.MinValue. You cannot assign null here, WHY? 
DateTime.TryParse(ctrlDate.Text, out d);

Null 許容 DateTime の場合

DateTime? nd = null;
DateTime.TryParse(ctrlDate.Text, out nd); //this doesn't work. it expects DateTime not DateTime?

日時の場合?

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

だから私はそれをに変更しなければなりませんでした

DateTime? nd = null;
DateTime d = DateTime.Now;
if(DateTime.TryParse(ctrlDate.Text, out d))
   nd = d;

DateTimenull 許容の日付でこれを実現するには、追加の変数を作成する必要がありました。

より良い方法はありますか?

4

4 に答える 4

4

outメソッドに引数として渡される変数に何も割り当てる必要はありません。

DateTime d;
if (DateTime.TryParse(ctrlDate.Text, out d))
{
    // the date was successfully parsed => use it here
}
else
{
    // tell the user to enter a valid date
}

を記述できない理由についての最初の質問に関してDateTime d = null;は、DateTime が参照型ではなく値型であるためです。

于 2012-09-20T07:19:56.097 に答える
2

DateTime追加の変数を作成する必要があります。これ以上の方法はありません。

もちろん、独自の解析方法でカプセル化できますが:

bool MyDateTimeTryParse(string text, out DateTime? result)
{
    result = null;

    // We allow an empty string for null (could also use IsNullOrWhitespace)
    if (String.IsNullOrEmpty(text)) return true;

    DateTime d;
    if (!DateTime.TryParse(text, out d)) return false;
    result = d;
    return true;
}
于 2012-09-20T07:35:19.123 に答える
2

DateTime d = 新しい DateTime.Now; //ここで null を割り当てることはできません。なぜですか?

値型、構造体であるため、null を構造体/値型に割り当てることはできません。

DateTime.TryParse の場合

使用する場合DateTime.TryParseは、タイプの追加変数を作成し、必要にDateTime応じてその値を Nullable DateTime に割り当てる必要があります。

于 2012-09-20T07:19:28.013 に答える
0

使わない理由

DateTime.MinValue 

null許容型の代わりに?

于 2012-09-20T07:22:38.233 に答える