質問

次のコードスニペットがあります:

        // Notify the source (the other control).
        if (operation != DropOperation.Reorder) {
            e = new DroppedEventArgs()
            {
                Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere,
                Source = src,
                Target = this,
                DroppedItems = srcItems
            };
            src.OnDropped(e);
        }

私は理解できません
Operation = operation == DropOperation.MoveToHere? DropOperation.MoveFromHere:DropOperation.CopyFromHere 行。

誰かがそれを説明できますか? record ... dropOperationは列挙型です。 vbの構文的に同等なものを私に必要とするすべてを与えることができます。

Seth

役に立ちましたか?

解決

理解しにくい理由は、三項演算子?:に慣れていないという事実によるものです。基本的には、式を評価し、評価が true または false のどちらを返したかに応じて、2つの値のいずれかを返します。

たとえば、次の式は" true"を返します。ブール値がtrueで、かつ「false」の場合そうでなければ:

bool test = false;
string testString = test ? "true" : "false";

実際にはVB.NETにも存在しますが、表現は少し異なります。それぞれC#とVB.NETのこれら2つのステートメントは実際には同じです

Dim s As String = If(True, "kek", "lol")
string s = true ? "kek" : "lol";

IIfと10進数演算子の違いは、IIfは演算子ではなく関数であるため、IIfは常に2番目と3番目のパラメーターの両方を評価することです。このため、テナリーオペレーターの方が好みです。

:Tenary演算子はVB 9で追加されたため、以前のバージョンを使用している場合は、この機能をIIF関数に依存する必要があります。

他のヒント

If (operation = DropOperation.MoveToHere) Then
    Operation = DropOperation.MoveFromHere
Else
    Operation = DropOperation.CopyFromHere
End If

ウィキペディアの必須リンク。私はコメントでこのリンクを言及するのをあきらめたので、ここでそれは答えです。 ?の使用を置き換えることができますIIF関数を呼び出す演算子:

Operation = IIF(operation = DropOperation.MoveToHere, DropOperation.MoveFromHere, DropOperation.CopyFromHere)

IIF 関数は真と偽の両方のケースを評価するので、それらは厳密に同等ではないことに注意してください。 演算子は、返されるケースのみを評価します。

と同等の一種のです< VB.NETのcode> IIf 関数(ブライアンのコメントを参照):

Operation = IIf(operation = DropOperation.MoveToHere, _
                DropOperation.MoveFromHere, _
                DropOperation.CopyFromHere)

C#では、これは条件演算子と呼ばれ、単純なif / elseステートメントの一種のショートカット。

これは条件演算子で、VBの IIf 関数:

  

式の評価に応じて、2つのオブジェクトのいずれかを返します。

Public Function IIf( _
   ByVal Expression As Boolean, _ 
   ByVal TruePart As Object, _ 
   ByVal FalsePart As Object _ 
) As Object

この特定の例では、 IIf 関数は次のように記述されます。

Operation = IIF((operation = DropOperation.MoveToHere), _
    DropOperation.MoveFromHere, _
    DropOperation.CopyFromHere)

これは 演算子は条件付き割り当てに使用します。この行は、基本的に次の構文糖衣です:

// C# expanded example
if (operation == DropOperation.MoveToHere)
{
   Operation = DropOperation.MoveFromHere;
}
else
{
   Operation = DropOperation.CopyFromHere;
}

VBでは、次と同等になります:

If operation = DropOperation.MoveToHere Then
   Operation = DropOperation.MoveFromHere
Else
   Operation = DropOperation.CopyFromHere
End If
operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere

これは三項演算子と呼ばれます。基本的に短い書き方です:

if (operation == DropOperation.MoveToHere)
  return DropOperation.MoveToHere;
else
  return DropOperation.CopyFromHere;

?:構造は三項演算子であり、基本的にはインライン if(x)y else x です。インラインの利点は、変数にすぐに割り当てられるということです。 ifステートメントではできません。

C#ブロガーは&quot;?&quot;を使用しますたくさん。このコードを見てください:

int Foo(int x, int y){
return x==y? 10: 11;
}

等しい:

int Foo(int x, int y){
if (x==y)
return 10; 
else
return 11;
}

よく説明されたドーナツの答えを読んでください!!

(&quot; VB-er&quot;私はこの用語が好きです)

三項演算子と呼ばれます。 > VBには存在しないと思いますが、基本的にはif / elseの省略形です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top