回答:
If()
2つの引数を指定して演算子を使用します(Microsoftのドキュメント)。
' 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 のステートメントはif...?...:
C#のステートメントと同じであり、??
演算子ではないと思います
??
(この質問の別の回答:stackoverflow.com/a/20686360/1474939を参照)
If
、3つのパラメーターで VBを使用する方法を示しています。それはあるではない C#のに似??
演算子。より良い答えは、2つの引数を持つCode MaverickのIfです。(ニックは数年前に同様の答えを出しましたが、MSDNからの説明は含まれていません。)
IF()
オペレータはあなたのためにトリックを行う必要があります。
value = If(nullable, defaultValueIfNull)
受け入れられた答えはまったく説明がなく、単なるリンクにすぎません。
したがって、If
MSDNから取得したオペレーターの動作を説明する答えを残しておこうと思いました。
短絡評価を使用して、2つの値のいずれかを条件付きで返します。もしのオペレータは、3つの引数を指定してか、二つの引数で呼び出すことができます。
If( [argument1,] argument2, argument3 )
Ifの最初の引数は省略できます。これにより、2つの引数のみを使用してオペレーターを呼び出すことができます。次のリストは、If演算子が2つの引数で呼び出された場合にのみ適用されます。
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.
ときブール引数が省略され、最初の引数は参照またはNULL可能タイプでなければなりません。最初の引数がNothingと評価され た場合、2番目の引数の値が返されます。それ以外の場合はすべて、最初の引数の値が返されます。次の例は、この評価がどのように機能するかを示しています。
' 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))
3つ以上の値(ネストされたif
s)を処理する方法の例:
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)))
拡張メソッドを使用できます。これCOALESCE
はSQLのように機能し、テストしようとしているものに対してはやり過ぎですが、機能します。
''' <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
組み込みは、2つの null可能な選択肢If(nullable, secondChoice)
しか処理できません。ここでは、必要な数のパラメータを使用できます。最初のnullでないものが返され、残りのパラメーターはその後評価されません(/ および/ などの短絡)Coalesce
AndAlso
&&
OrElse
||
Return args.FirstOrDefault(Function(arg) arg IsNot Nothing)
:-)にすることができます
これらのソリューションのほとんどの1つの重要な制限は、それらが短絡しないことです。したがって、実際にはと同等ではありません??
。
組み込みIf
演算子は、前のパラメーターが何も評価されない限り、後続のパラメーターを評価しません。
次のステートメントは同等です。
C#
var value = expression1 ?? expression2 ?? expression3 ?? expression4;
VB
dim value = if(expression1,if(expression2,if(expression3,expression4)))
これは機能するすべてのケースで??
機能します。他の解決策は、実行時のバグを簡単に引き起こす可能性があるため、非常に注意して使用する必要があります。
Ifオペレーター(Visual Basic)に関するMicrosoftのドキュメントをこちらでチェックしてください:https : //docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator
If( [argument1,] argument2, argument3 )
ここにいくつかの例があります(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"))