2016-12-31 13 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은 두 번째와 세 번째 인수가 일치해야하기 때문에 If(X, 0, Nothing)에 사용하는 Nothing의 의미입니다. 0 유형이기 때문에 형식을 Integer으로 처리합니다. 널 (NULL)로 (중 Integer? 또는 Double? 일 것이다)이 컴파일러의 그림을 수 있도록 명시 적으로 유형 중 하나를 지정

당신이 원하는 :

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