Por favor, explique C # sintaxe para um vb-er
-
06-07-2019 - |
Pergunta
Eu tenho o seguinte trecho 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);
}
Eu não entendo o
linha Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
.
Alguém pode explicar isso? Para o registro ... dropOperation é uma enumeração. Pode você dar vb sintática equivalente é tudo necessidade I.
Seth
Solução
A razão é difícil de entender é devido ao fato de que você não estiver familiarizado com o operador ternário?:. Basicamente o que ele faz é avaliar uma expressão, e retornar um dos dois valores, dependendo se a avaliação retornou true ou false .
Por exemplo, a seguinte expressão retornará "true" se o booleano é verdadeiro, e "false" elsewise:
bool test = false;
string testString = test ? "true" : "false";
Ele faz em exist fato em VB.NET bem - expressa um pouco diferente embora. Estas duas declarações em, respectivamente, C # e VB.NET são na verdade a mesma
Dim s As String = If(True, "kek", "lol")
string s = true ? "kek" : "lol";
A diferença entre IIf eo operador tenary é que IIf sempre vai avaliar tanto o segundo e terceiro parâmetro porque IIf é uma função em vez de um operador. Por esta razão, o operador tenary é muito preferir.
Nota ??em>: O operador tenary foi adicionado no VB 9, por isso, se você estiver usando versões anteriores você terá que contar com a função IIF para essa funcionalidade.
Outras dicas
If (operation = DropOperation.MoveToHere) Then
Operation = DropOperation.MoveFromHere
Else
Operation = DropOperation.CopyFromHere
End If
obrigatório wikipedia ligação . Eu desisti de mencionar este link em um comentário, por isso aqui está em uma resposta. Você pode substituir usos do? operador com chamadas para a função IIF:
Operation = IIF(operation = DropOperation.MoveToHere, DropOperation.MoveFromHere, DropOperation.CopyFromHere)
Note que não são estritamente equivalente, desde o IIF função avalia tanto o verdadeiro eo falso caso, enquanto que o? operador avalia apenas o caso ele retorna.
É tipo de equivalente do IIf
função em VB.NET (veja o comentário de Brian):
Operation = IIf(operation = DropOperation.MoveToHere, _
DropOperation.MoveFromHere, _
DropOperation.CopyFromHere)
Em C # isso é chamado de condicional operador , e é uma espécie de atalho para um simples if / else.
Este é o operador condicional, é muito semelhante à do VB IIf
função:
Retorna um dos dois objetos, dependendo da avaliação de uma expressão.
Public Function IIf( _
ByVal Expression As Boolean, _
ByVal TruePart As Object, _
ByVal FalsePart As Object _
) As Object
Neste exemplo em particular a função IIf
seria escrito assim:
Operation = IIF((operation = DropOperation.MoveToHere), _
DropOperation.MoveFromHere, _
DropOperation.CopyFromHere)
Isso é usar o operador ?
para atribuição condicional. Esta linha é o açúcar, basicamente, sintático para:
// C# expanded example
if (operation == DropOperation.MoveToHere)
{
Operation = DropOperation.MoveFromHere;
}
else
{
Operation = DropOperation.CopyFromHere;
}
O que, em VB, seria equivalente a:
If operation = DropOperation.MoveToHere Then
Operation = DropOperation.MoveFromHere
Else
Operation = DropOperation.CopyFromHere
End If
operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
Este é chamado o operador ternário. É basicamente uma pequena maneira de escrever:
if (operation == DropOperation.MoveToHere)
return DropOperation.MoveToHere;
else
return DropOperation.CopyFromHere;
A construo ?:
é o operador ternário, basicamente um if (x) y else x
em linha. O benefício da linha é visto aqui na medida em que é atribuído imediatamente a uma variável. Você não pode fazer isso com uma declaração se.
C # Bloggers usar o "?" muito. Olhe este código:
int Foo(int x, int y){
return x==y? 10: 11;
}
é igual a:
int Foo(int x, int y){
if (x==y)
return 10;
else
return 11;
}
Basta ler o bem explicado resposta de Donut !!
( "VB-er" Eu gosto do termo)
É o chamado ternário operador. Eu não acho que ela existe em VB, mas é basicamente um atalho para um if / else.