.getValueordeFault (0)와 IF (변수, 0)를 사용하는 것 사이에 차이가 있습니까?

StackOverflow https://stackoverflow.com/questions/2405923

문제

C 계산을위한 아래 두 가지 방법 사이에 차이가 있습니까?

Dim a As Integer? = 10
Dim b As Integer? = Nothing
Dim c As Integer

' Method 1
c = If(a, 0) + If(b, 0)

' Method 2
c = a.GetValueOrDefault(0) + b.GetValueOrDefault(0)
도움이 되었습니까?

해결책

반사판에 따르면, 코드 스 니펫의 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

두 형태를 나타내는 것은 정확히 동일한 것을 효과적으로 나타냅니다

다른 팁

c = if (a, 0) + if (b, 0) 문이 이것에 대해 컴파일됩니다.

  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

두 번째 스 니펫은 정확히 그대로 컴파일됩니다. 여기는 명확한 승자입니다.

a.GetValueOrDefault(0) 약간 더 효율적인 버전입니다 If(a, 0)

a.GetValueOrDefault() 약간 더 효율적인 버전입니다 a.GetValueOrDefault(0)

물론 이것은 숫자 유형에만 해당됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top