2009-04-29 8 views
0

ビジネスオブジェクトがshort?データ型を返しています。このコードは壊れますか?

この値を変数にどのように取得できますか?

short? myShort = SomeBusinessObject.UserBlah; 

これは間違いありませんか? nullの場合は破損しますか?

+0

あなたはnullと思われるものを明確にする必要があると思います。答えの多くは、UserBlahが返すものについての仮定をしています。私の推測(したがって私の答え)は、あなたがSomeBusinessObjectがnullであるのを防ぐことを試みているということです。しかし、それは推測であり、より多くの情報が良いでしょう。 –

答えて

1

はい、正しいです。

2

SomeBusinessObjectがnullになるのを実際に防御しようとしていますか?そうであれば、null可能な型はそこであなたを助けません。 SomeBusinessObjectがnullかどうかを確認する必要があります。

私はUserBlahが短く返された場合、nullではない(nullは許されない型ではないため)ことを想定しています。

1

myShortは、ビジネスオブジェクトがnullの場合はnullになります。

値タイプとしてmyShortを直接参照することはできません。これは問題ありません。

myShort.HasValueを使用すると、myShortnullであるかどうかを確認できます。

myShort.Valueを使用して値を取得します。値が定義されていない場合、例外がスローされます。

GetValueOrDefault()を使用し、定義されていなくても(null)デフォルト値を渡すことができます。このファンクションは、NULL可能型がnullの場合に渡された値を戻します。 UserBlahNullable<Int16>に暗黙的に変換され、それはあなたがmyShort.Valueのメンバーにアクセスしようとしない限り、それは中断されません。その場合にはnullに設定されている場合

1

myShortはnullになります。

また、これを行うことができます:正しいのです

short defaultValue = 0; 
short myShort  = SomeBusinessObject.UserBlah ?? defaultValue; 
4

を。 myShortをチェックした後、変数の使用myShort.Valueにそれを取得するには

short s = myShort.HasValue ? myShort.Value : (short) 0; // or some other short value 
+2

GetValueOrDefault() – Nick

+0

さらに優れています。デフォルトは0なのでこの構文を使用し、DB値がnullの場合は* .MinValueを使用します。私たちはまだ、レガシーシステムではnull可能な型に移行しています。 –

+0

上記のパターンの代わりにnull coalesce演算子を使用してください。 –

4

を:あなただけがnull非許容のショートにmyShortを割り当てている場合はそのように、あなたがhasValueはをチェックする必要があり、その場合には、心配する必要は.HasValue

2

はnull合体演算子を忘れないでください。

short myShort = SomeBusinessObject.UserBlah ?? 0; 

SomeBusinessObject.UserBlahがnullの場合、値を??の右側に渡します。あなたは何かにそれをデフォルトすることができます。

関連する問題