C # ??
operatörü için bir VB.NET eşdeğeri var mı ?
C # ??
operatörü için bir VB.NET eşdeğeri var mı ?
Yanıtlar:
If()
İşleci iki bağımsız değişkenle kullanın ( Microsoft belgeleri ):
' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6
' Variable first <> Nothing, so its value, 3, is returned.
Console.WriteLine(If(first, second))
second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))
first = Nothing second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))
If()
VB'deki açıklama if...?...:
C # ile aynı , ??
operatör değil
??
(bu sorunun başka bir cevabına bakın: stackoverflow.com/a/20686360/1474939 )
If
üç parametre ile nasıl kullanılacağını gösterir . Yani değil C # 'ın benzer ??
operatörü. Daha iyi cevap Code Maverick's If ise iki argümanla . (Nick'in yıllar önce benzer bir cevabı vardı, ancak MSDN'den açıklama içermiyor.)
IF()
Operatör sizin için hile yapmak gerekir:
value = If(nullable, defaultValueIfNull)
Kabul edilen cevabın herhangi bir açıklaması yoktur ve sadece bir bağlantıdır.
Bu nedenle, If
operatörün MSDN'den nasıl çalıştığını açıklayan bir cevap bırakacağımı düşündüm :
İki değerden birini koşullu olarak döndürmek için kısa devre değerlendirmesini kullanır. Eğer operatör üç argümanlarla ya da iki argümanlarla çağrılabilir.
If( [argument1,] argument2, argument3 )
If için ilk argüman atlanabilir. Bu, operatörün yalnızca iki argüman kullanarak çağrılmasını sağlar. Aşağıdaki liste yalnızca If işleci iki bağımsız değişkenle çağrıldığında geçerlidir .
Term Definition
---- ----------
argument2 Required. Object. Must be a reference or nullable type.
Evaluated and returned when it evaluates to anything
other than Nothing.
argument3 Required. Object.
Evaluated and returned if argument2 evaluates to Nothing.
Tüm Boole bağımsız değişken atlanırsa, ilk değişken bir başvuru ya da olabilecek türde olmalıdır. İlk bağımsız değişken Hiçbir şey olarak değerlendirilmezse , ikinci bağımsız değişkenin değeri döndürülür. Diğer tüm durumlarda, ilk argümanın değeri döndürülür. Aşağıdaki örnekte bu değerlendirmenin nasıl çalıştığı gösterilmektedir.
' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6
' Variable first <> Nothing, so its value, 3, is returned.
Console.WriteLine(If(first, second))
second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))
first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))
İkiden fazla değerin (iç içe yerleştirilmiş if
) nasıl işleneceğine ilişkin bir örnek :
Dim first? As Integer = Nothing
Dim second? As Integer = Nothing
Dim third? As Integer = 6
' The LAST parameter doesn't have to be nullable.
'Alternative: Dim third As Integer = 6
' Writes "6", because the first two values are "Nothing".
Console.WriteLine(If(first, If(second, third)))
Bir uzantı yöntemi kullanabilirsiniz. Bu COALESCE
, SQL gibi çalışır ve muhtemelen test etmeye çalıştığınız şey için aşırıya kaçar, ancak çalışır.
''' <summary>
''' Returns the first non-null T based on a collection of the root object and the args.
''' </summary>
''' <param name="obj"></param>
''' <param name="args"></param>
''' <returns></returns>
''' <remarks>Usage
''' Dim val as String = "MyVal"
''' Dim result as String = val.Coalesce(String.Empty)
''' *** returns "MyVal"
'''
''' val = Nothing
''' result = val.Coalesce(String.Empty, "MyVal", "YourVal")
''' *** returns String.Empty
'''
''' </remarks>
<System.Runtime.CompilerServices.Extension()> _
Public Function Coalesce(Of T)(ByVal obj As T, ByVal ParamArray args() As T) As T
If obj IsNot Nothing Then
Return obj
End If
Dim arg As T
For Each arg In args
If arg IsNot Nothing Then
Return arg
End If
Next
Return Nothing
End Function
Yerleşik If(nullable, secondChoice)
yalnızca işleyebilir iki null seçimler. Burada, istenildiği Coalesce
kadar parametre yapılabilir . İlk boş olmayan değer döndürülür ve parametrelerin geri kalanı bundan sonra değerlendirilmez (kısa devre, AndAlso
/ &&
ve OrElse
/ gibi ||
)
Return args.FirstOrDefault(Function(arg) arg IsNot Nothing)
:-) olmasına izin verebilirsiniz
Bu çözümlerin çoğunun önemli bir kısıtlaması kısa devre yapmayacaklarıdır. Bu nedenle aslında buna eşdeğer değildirler ??
.
Daha If
önceki parametre hiçbir şeyi değerlendirmediği sürece, yerleşik işleç sonraki parametreleri değerlendirmez.
Aşağıdaki ifadeler eşdeğerdir:
C #
var value = expression1 ?? expression2 ?? expression3 ?? expression4;
VB
dim value = if(expression1,if(expression2,if(expression3,expression4)))
Bu, çalıştığı tüm durumlarda işe yarayacaktır ??
. Diğer çözümlerin herhangi biri, çalışma zamanı hatalarını kolayca ekleyebildikleri için çok dikkatli kullanılmalıdır.
Operator (Visual Basic) hakkında Microsoft belgelerine buradan ulaşabilirsiniz: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator
If( [argument1,] argument2, argument3 )
İşte bazı örnekler (VB.Net)
' This statement prints TruePart, because the first argument is true.
Console.WriteLine(If(True, "TruePart", "FalsePart"))
' This statement prints FalsePart, because the first argument is false.
Console.WriteLine(If(False, "TruePart", "FalsePart"))
Dim number = 3
' With number set to 3, this statement prints Positive.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))
number = -1
' With number set to -1, this statement prints Negative.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))