0

具体的には、DateTimeがありますか?生年月日

私の質問は、この場合に何が起こるかです:

lblBirthDate.Text = myObject.BirthDate.GetValueOrDefault().ToString();

BirthDateがnullになる場合。resharperをインストールしましたが、nullの問題が発生する可能性があることを警告していません...

4

3 に答える 3

6

BirthDateの場合null、のデフォルトインスタンスのローカライズされた文字列表現を取得しますDateTime。つまり、0001年1月1日の00:00:00.0000000の文字列表現を取得します。

ヌルの問題がないため、ReSharperから警告は表示されません。Nullable<T>.GetValueOrDefaultのnullインスタンスを呼び出すことは実行時の例外ではありませんNullable<T>。代わりに、nullインスタンスがある場合は、デフォルト値を取得します。それがまさにGetValueOrDefault意味することです。ifを取得し、そうでないValue場合HasValuetrue、基になる構造体タイプのデフォルト値を取得します。

于 2012-05-07T15:59:30.407 に答える
2

nullの場合は必ずGetValueOrDefault返されます。DateTime.MinValue

null値を処理する方法は次のとおりです。

DateTime? myNullDate = null;

DateTime myDate;
myDate = myNullDate ?? DateTime.Now; // myDate => DateTime.Now
myDate = myNullDate ?? default(DateTime); // myDate => DateTime.MinValue
myDate = myNullDate.GetValueOrDefault(DateTime.Now); // myDate => DateTime.Now
myDate = myNullDate.GetValueOrDefault(); // myDate => DateTime.MinValue
于 2012-05-07T16:01:10.453 に答える
0

DateTimeのデフォルト値は1/1/100:00:00であるため、Resharperはエラーを表示しません。デフォルト演算子を使用して、任意のタイプのデフォルト値を取得できます。

DateTime defaultDateTime = default(DateTime);

この値はとまったく同じですDateTime.MinValue

nullを使用する必要がある場合は、プロパティをnull可能として宣言する必要があります。

DateTime? BirthDay { get; set; };

null許容のDateTimeは、値がnullの場合でもエラーなしのDateTime?呼び出しをサポートし、nullの場合は空の文字列を提供します。ToString()そうすれば、nullについて心配する必要はありません。

default(DateTime)のような欠落値を表す特別な値を持つよりも、null許容のDateTimeを使用する方がはるかに一貫性があります。DateTime.MinValue;

于 2012-05-07T17:05:33.597 に答える