Question

J'ai l'extrait de code suivant:

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

Je ne comprends pas le
Operation = operation == DropOperation.MoveToHere? DropOperation.MoveFromHere: ligne DropOperation.CopyFromHere .

Quelqu'un peut-il l'expliquer? Pour mémoire ... dropOperation est une énumération. Pouvez-vous donner l’équivalent syntaxique de vb, c’est tout ce dont j'ai besoin.

Seth

Était-ce utile?

La solution

La raison pour laquelle cela est difficile à comprendre est due au fait que vous n'êtes pas familier avec l'opérateur ternaire?:. En gros, il évalue une expression et renvoie l'une des deux valeurs, selon que l'évaluation renvoie true ou false .

Par exemple, l'expression suivante renverra " true " si le booléen est vrai, et "faux" sinon:

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

Il existe en fait dans VB.NET également - exprimé un peu différemment cependant. Ces deux instructions respectivement dans C # et VB.NET sont en fait les mêmes

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

La différence entre IIf et l'opérateur tenary réside dans le fait qu'IIf évaluera toujours les deuxième et troisième paramètres, car IIf est une fonction et non un opérateur. Pour cette raison, l’opérateur de téléphonie fixe est de beaucoup préférable.

Remarque : L'opérateur tenary a été ajouté à VB 9. Si vous utilisez des versions précédentes, vous devrez donc utiliser la fonction IIF pour cette fonctionnalité.

Autres conseils

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

lien wikipedia obligatoire . J'ai renoncé à mentionner ce lien dans un commentaire, alors le voici dans une réponse. Vous pouvez remplacer les utilisations de la? opérateur avec appels à la fonction IIF:

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

Notez qu'ils ne sont pas strictement équivalents, car la fonction de IIF évalue à la fois les cas vrai et faux, alors que les cas? opérateur n'évalue que le cas renvoyé.

C’est en quelque sorte l’équivalent de < code> IIf dans VB.NET (voir le commentaire de Brian):

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

En C #, il s'agit de l’ opérateur conditionnel . une sorte de raccourci pour une simple déclaration if / else.

Il s'agit de l'opérateur conditionnel, il est très similaire à celui de VB IIf fonction:

  

Renvoie l'un des deux objets, en fonction de l'évaluation d'une expression.

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

Dans cet exemple particulier, la fonction IIf serait écrite comme suit:

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

Il s’agit de ? opérateur pour l’affectation conditionnelle. Cette ligne est essentiellement du sucre syntaxique pour:

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

Ce qui, en VB, serait équivalent à:

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

Ceci est appelé l'opérateur ternaire. C'est en gros une façon d'écrire:

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

La construction ?: est l'opérateur ternaire, essentiellement un en ligne si (x) ou x . Le bénéfice de l’inline est visible ici dans la mesure où il est immédiatement affecté à une variable. Vous ne pouvez pas faire cela avec une instruction if.

C # Les blogueurs utilisent les mots clés "?". beaucoup. Regardez ce code:

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

est égal à:

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

Il suffit de lire la réponse bien expliquée de Donut !!

("VB-er" j'aime bien le terme)

C'est ce qu'on appelle l'opérateur ternaire. Je ne pense pas que cela existe en VB, mais c’est essentiellement un raccourci pour un if / else.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top