2010-03-09 8 views

답변

1

반사판에 따르면, 당신의 코드에서 일리노이로 컴파일 해제 :

Public Shared Sub Main() 
    Dim a As Integer? = 10 
    Dim b As Integer? = Nothing 
    Dim c As Integer = (IIf(a.HasValue, a.GetValueOrDefault, 0) + IIf(b.HasValue, b.GetValueOrDefault, 0)) 
    c = (a.GetValueOrDefault(0) + b.GetValueOrDefault(0)) 
End Sub 

[편집]을 선택한 다음 (각각) 다음 GetValueOrDefault()GetValueOrDefault(T defaultValue)가 제공하는 반사 기능을보고 :

Public Function GetValueOrDefault() As T 
    Return Me.value 
End Function 

Public Function GetValueOrDefault(ByVal defaultValue As T) As T 
    If Not Me.HasValue Then 
     Return defaultValue 
    End If 
    Return Me.value 
End Function 
두 형태를 나타내는

효과적으로 정확히 같은 일

0

a.GetValueOrDefault(0)은 물론 a.GetValueOrDefault(0)

의 약간 더 효율적인 버전 If(a, 0)

a.GetValueOrDefault()의 약간 더 효율적인 버전입니다 않습니다,이 경우에만 사실이다 숫자 형. (a, 0) + 인 경우 (b, 0)의 문이 컴파일 알려지면

1

는 C =

Dim tmpa As Integer 
    If a.HasValue Then 
    tmpa = a.GetValueOrDefault() 
    Else 
    tmpa = 0 
    End If 
    Dim tmpb As Integer 
    If b.HasValue Then 
    tmpb = b.GetValueOrDefault() 
    Else 
    tmpb = 0 
    End If 
    c = tmpa + tmpb 

번째 단편은 그대로 바로 컴파일 얻는다. 여기서 확실한 승자입니다.