Frage

Ich habe den folgenden Code-Snippet:

        // 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);
        }

Ich verstehe nicht, die
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere Linie.

Kann jemand erklären? Für die Aufzeichnung ... ist dropOperation eine Enumeration. Können Sie vb syntaktische Äquivalent geben, ist alles was ich brauche.

Seth

War es hilfreich?

Lösung

Der Grund ist es schwer zu verstehen ist, ist aufgrund der Tatsache, dass Sie mit dem ternären Operator nicht vertraut sind?:. Im Grunde, was es tut, ist ein Ausdruck bewerten und Rückkehr eines von zwei Wert je nachdem, ob die Auswertung zurückgegeben true oder false .

Zum Beispiel der folgende Ausdruck zurückkehren wird "true", wenn die boolean wahr ist, und "false" elsewise:

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

Es tut in der Tat gibt es in VB.NET als auch - zum Ausdruck gebracht, obwohl ein wenig anders. Diese beiden Aussagen in jeweils C # und VB.NET in der Tat sind die gleichen

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

Der Unterschied zwischen Ilf und dem tenary Operator ist, dass IIf immer beurteilen sowohl die zweite und dritte Parameter, weil IIf eine Funktion anstelle eines Operators ist. Aus diesem Grunde ist der tenary Betreiber viel lieber.

Hinweis : Der tenary Operator wurde in VB 9 hinzugefügt, so dass, wenn Sie frühere Versionen verwenden Sie auf der IIF-Funktion für diese Funktionalität verlassen müssen.

Andere Tipps

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

obligatorische Wikipedia-Link . Ich habe auf denen diesen Link in einem Kommentar auf, so ist es hier in einer Antwort. Sie können Anwendungen von der ersetzen? Betreiber mit Aufrufen an die IIF-Funktion:

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

Beachten Sie, dass sie nicht streng äquivalent sind, da der IIF Funktion wertet sowohl den wahren und den falschen Fall, während das? Operator wertet nur den Fall er zurückkehrt.

Es ist Art Äquivalent der IIf Funktion in VB.NET (Brians Kommentar sehen):

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

In C # wird diese so genannte Konditionaloperator und ist eine Art Abkürzung für eine einfache if / else-Anweisung.

Dies ist der Bedingungsoperator, es zu VB sehr ähnlich ist IIf Funktion:

  

Gibt einen von zwei Objekten in Abhängigkeit von der Auswertung eines Ausdrucks.

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

In diesem speziellen Beispiel der IIf Funktion wie folgt geschrieben werden würde:

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

Dies wird mit dem ? Operator für bedingte Zuweisung. Diese Linie ist im Grunde syntaktischen Zucker für:

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

, der in VB, wäre gleichbedeutend mit:

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

Dies ist der ternäre Operator genannt. Es ist im Grunde eine Kurzschreibweise:

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

Das ?: Konstrukt ist der ternäre Operator, im Grunde ein Inline-if (x) y else x. Der Vorteil der Inline ist hier zu sehen, dass es sofort zu einer Variablen zugewiesen wird. Sie können das nicht mit einer if-Anweisung.

C # Bloggers verwenden das "?" viel. Geben Sie diesen Code ein:

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

ist gleich:

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

Sie einfach die belesen erklärt Donut Antwort !!

( "VB-er:" Ich mag den Begriff)

Es ist die ternärer Operator. ich glaube nicht, existiert es in VB, aber es ist im Grunde nur eine Abkürzung für einen if / else.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top