3

If演算子(http://msdn.microsoft.com/en-us/library/bb513985(v=VS.100).aspx )を使用してSystem.Nullableオブジェクトに値を割り当てる場合、結果がNothing( null)の場合、0がオブジェクトに割り当てられます。

例:

'Expected value is null (Nothing). Actual value assigned is 0.
Dim x As System.Nullable(Of Integer) = If(1 = 0, 1, Nothing) 

xがnull許容型の場合、デフォルトの整数型0が割り当てられるのはなぜですか。nullの値を受け取るべきではありませんか?

4

2 に答える 2

4

Nothing値型のコンテキストでは、その型のデフォルト値に解決されます。整数の場合、これは単なる0。です。

If演算子は引数タイプ間で変換を行いません。あなたの場合と同様に、それらはすべて同等に扱われIntegerます。したがって、あなたのコードはと同じです

Dim x As Integer? = If(1 = 0, 1, 0)

結果をnull許容にするには、型を明示的にする必要があります。

Dim x As Integer? = If(1 = 0, 1, CType(Nothing, Integer?))
于 2011-08-30T15:56:19.913 に答える
3

整数としてキャストされたものは何も返さないのではなく?新しい整数を作成するだけですか?そしてそれを返します。

また、Nullable型を操作するときは、オブジェクトを返すだけでなく、Nullable(Of T)で常に.Value、.HasValue、および.GetValueOrDefaultメソッドを使用する必要があることに注意してください。したがって、あなたの場合、Xの値は確かに0ですが、HasValueプロパティをチェックすると、Falseを返してnullの状況を示す必要があります。同様に、チェックしたい場合If x = NothingはFalseをIf x.HasValue = False返しますが、Trueを返します。

正しく機能する例を次のように書くこともできます。

Dim x as Integer? = If(1=0, 1, new Integer?)
Console.WriteLine(x)
Console.WriteLine(x.HasValue)

出力:null False

于 2011-08-30T16:49:24.130 に答える