2016-12-31 12 views
0

条件付き三項演算子でNothing(Of Double)を設定できないのはなぜですか?条件付き三項演算子でNullable(Of)がNothingに設定されていません

Dim d As Double? = Nothing 
d = If(True, 0, Nothing) ' result: d = 0 
d = Nothing     ' result: d = Nothing 
d = If(False, 0, Nothing) ' result: d = 0 Why? 

編集:(下の受け入れ答えに基づいて)これらの作品:

d = If(False, 0, New Integer?) 
d = If(False, CType(0, Double?), Nothing) 
d = If(False, 0, CType(Nothing, Double?)) 
+0

http://stackoverflow.com/a/ 1828205/1070452 – Plutonix

+0

'Option Strict On'は、このような状況でより速くフィードバックを提供します。 – Fabio

答えて

1

Nothingは種類の多くだけでなく、T?に変換します。それは楽しくDoubleに変換することができます:

Function X() As Double 
    Return Nothing ' result: 0.0 
End Function 

またはIntegerへ。 Ifは、タイプが一致する2番目と3番目の引数が必要であるため、0のタイプであるため、タイプIntegerとして扱いますので、If(X, 0, Nothing)で使用しているのはNothingの意味です。明示的に(どちらかInteger?またはDouble?がうまくいく)nullとしてのいずれかのタイプを指定する

は何をしたいコンパイラの姿を繰り出す:

d = If(False, CType(0, Double?), Nothing)、またはd = If(False, 0, CType(Nothing, Double?))

+0

私のコメントはまだ編集できません。とにかく私はあなたの答えをマークしました。また、@Plutonixは正しい道を私に指摘した。お二人のおかげです。 – yarecky

+0

'Nothing'は変換されません。単純に型のデフォルト値です。 'int'の場合は' 0'、参照型の場合は 'null' – Fabio

+0

@Fabio言語仕様は変換として記述します。https://msdn.microsoft.com/en-us/library/aa711655(v = vs.71).aspx。 – hvd