Pregunta

Tengo el siguiente fragmento de código:

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

No entiendo el
Operation = operation == DropOperation.MoveToHere? DropOperation.MoveFromHere: DropOperation.CopyFromHere línea.

¿Alguien puede explicarlo? Para el registro ... dropOperation es una enumeración. ¿Me puede dar el equivalente sintáctico vb es todo lo que necesito?

Seth

¿Fue útil?

Solución

¿La razón por la que es difícil de entender se debe al hecho de que no está familiarizado con el operador ternario?:. Básicamente, lo que hace es evaluar una expresión y devolver uno de dos valores dependiendo de si la evaluación arrojó verdadero o falso .

Por ejemplo, la siguiente expresión devolverá " verdadero " si el booleano es verdadero, y "falso" de lo contrario:

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

De hecho, también existe en VB.NET, aunque se expresa de manera un poco diferente. Estas dos declaraciones en C # y VB.NET son, de hecho, las mismas

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

La diferencia entre IIf y el operador de tenary es que IIf siempre evaluará tanto el segundo como el tercer parámetro porque IIf es una función en lugar de un operador. Por esta razón, el operador de tenary es mucho más preferible.

Nota : el operador de tenary se agregó en VB 9, por lo que si usa versiones anteriores tendrá que confiar en la función IIF para esta funcionalidad.

Otros consejos

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

Enlace obligatorio de wikipedia . Dejé de mencionar este enlace en un comentario, así que aquí está en una respuesta. Puede reemplazar los usos de? operador con llamadas a la función IIF:

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

Tenga en cuenta que no son estrictamente equivalentes, ya que la función IIs evalúa tanto el caso verdadero como el falso, mientras que el? El operador solo evalúa el caso que devuelve.

Es una especie de equivalente del < code> IIf función en VB.NET (vea el comentario de Brian):

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

En C # esto se denomina operador condicional , y es una especie de acceso directo para una simple declaración if / else.

Este es el operador condicional, es muy similar a IIf función:

  

Devuelve uno de los dos objetos, según la evaluación de una expresión.

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

En este ejemplo particular, la función IIf se escribiría así:

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

Esto está utilizando el ? operador para asignación condicional. Esta línea es básicamente azúcar sintáctica para:

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

Que, en VB, sería equivalente a:

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

Esto se llama operador ternario. Básicamente es una forma corta de escribir:

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

La construcción ?: es el operador ternario, básicamente un en línea if (x) y else x . El beneficio de la línea se ve aquí en que se asigna inmediatamente a una variable. No puede hacer eso con una declaración if.

C # Los bloggers usan el "? " mucho. Mira este código:

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

Es igual a:

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

¡¡¡Acabo de leer la respuesta de Donut bien explicada !!

(" VB-er " Me gusta el término)

Se llama operador ternario. No creo que exista en VB, pero es básicamente una abreviatura para un if / else.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top