Согласно Reflector, IL из вашего фрагмента кода декомпилируется в:
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
Указание на то, что любая форма фактически делает одно и то же