هل هناك أي فرق بين استخدام .getValueordefault (0) وإذا (متغير، 0) مع أنواع غير قابلة للناس؟
سؤال
هل هناك أي فرق بين الطريقة الثانية أدناه لحساب ج ... على وجه التحديد مشاكل الملاكمة / إلغاء الصندوق؟
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 من Snippet Snippet في:
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 = إذا كان (A، 0) + إذا تم ترجمة العبارة (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)
بالطبع، هذا صحيح فقط لأنواع رقمية.
لا تنتمي إلى StackOverflow