ビジネスオブジェクトがshort?
データ型を返しています。このコードは壊れますか?
この値を変数にどのように取得できますか?
short? myShort = SomeBusinessObject.UserBlah;
これは間違いありませんか? nullの場合は破損しますか?
ビジネスオブジェクトがshort?
データ型を返しています。このコードは壊れますか?
この値を変数にどのように取得できますか?
short? myShort = SomeBusinessObject.UserBlah;
これは間違いありませんか? nullの場合は破損しますか?
はい、正しいです。
SomeBusinessObjectがnullになるのを実際に防御しようとしていますか?そうであれば、null可能な型はそこであなたを助けません。 SomeBusinessObjectがnullかどうかを確認する必要があります。
私はUserBlahが短く返された場合、nullではない(nullは許されない型ではないため)ことを想定しています。
myShort
は、ビジネスオブジェクトがnull
の場合はnull
になります。
値タイプとしてmyShort
を直接参照することはできません。これは問題ありません。
myShort.HasValue
を使用すると、myShort
がnull
であるかどうかを確認できます。
myShort.Value
を使用して値を取得します。値が定義されていない場合、例外がスローされます。
GetValueOrDefault()
を使用し、定義されていなくても(null
)デフォルト値を渡すことができます。このファンクションは、NULL可能型がnull
の場合に渡された値を戻します。 UserBlah
がNullable<Int16>
に暗黙的に変換され、それはあなたがmyShort.Value
のメンバーにアクセスしようとしない限り、それは中断されません。その場合にはnullに設定されている場合
myShortはnullになります。
また、これを行うことができます:正しいのです
short defaultValue = 0;
short myShort = SomeBusinessObject.UserBlah ?? defaultValue;
を。 myShortをチェックした後、変数の使用myShort.Valueにそれを取得するには
short s = myShort.HasValue ? myShort.Value : (short) 0; // or some other short value
GetValueOrDefault() – Nick
さらに優れています。デフォルトは0なのでこの構文を使用し、DB値がnullの場合は* .MinValueを使用します。私たちはまだ、レガシーシステムではnull可能な型に移行しています。 –
上記のパターンの代わりにnull coalesce演算子を使用してください。 –
を:あなただけがnull非許容のショートにmyShortを割り当てている場合はそのように、あなたがhasValueはをチェックする必要があり、その場合には、心配する必要は.HasValue
はnull合体演算子を忘れないでください。
short myShort = SomeBusinessObject.UserBlah ?? 0;
SomeBusinessObject.UserBlahがnullの場合、値を??の右側に渡します。あなたは何かにそれをデフォルトすることができます。
あなたはnullと思われるものを明確にする必要があると思います。答えの多くは、UserBlahが返すものについての仮定をしています。私の推測(したがって私の答え)は、あなたがSomeBusinessObjectがnullであるのを防ぐことを試みているということです。しかし、それは推測であり、より多くの情報が良いでしょう。 –