Please explain the C # syntax on vb-er
I have the following piece of code:
// 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);
}
I do not understand
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
.
Can someone explain this? For the record ... dropOperation is an enumeration. Can you give the syntactic equivalent of vb everything I need.
Set
source to share
The reason it is difficult to understand is because you are not familiar with the ternary operator?:. Basically what it does is evaluate the expression and return one of two values ββdepending on whether the evaluation returned true or false.
For example, the following expression will return "true" if the boolean value is true and "false" is:
bool test = false;
string testString = test ? "true" : "false";
It actually exists in VB.NET as well, although it is expressed in a slightly different way. These two statements respectively C # and VB.NET are actually the same
Dim s As String = If(True, "kek", "lol")
string s = true ? "kek" : "lol";
The difference between IIf and the tenary operator is that IIf will always evaluate both the second and third parameter, because IIf is a function instead of an operator. For this reason, the promising operator prefers.
Note. The tenary operator was added in VB 9, so if you are using previous versions you will have to rely on the IIF function for this function.
source to share
Required link for wikipedia . I refused to mention this link in the comment, so here it is in the answer. Can you replace the usage? operator with IIF function calls:
Operation = IIF(operation = DropOperation.MoveToHere, DropOperation.MoveFromHere, DropOperation.CopyFromHere)
Note that they are not strictly equivalent as the IIF evaluates both true and false case, then how? Operator only evaluates the case it returns.
source to share
This is sort of the equivalent IIf
in VB.NET (see Brian's comment):
Operation = IIf(operation = DropOperation.MoveToHere, _ DropOperation.MoveFromHere, _ DropOperation.CopyFromHere)
In C #, this is called a conditional statement and is sort of a shortcut to a simple if / else statement.
source to share
The ?
operator is used for conditional assignment . This line is basically syntactic sugar for:
// C# expanded example
if (operation == DropOperation.MoveToHere)
{
Operation = DropOperation.MoveFromHere;
}
else
{
Operation = DropOperation.CopyFromHere;
}
Which in VB would be equivalent to:
If operation = DropOperation.MoveToHere Then
Operation = DropOperation.MoveFromHere
Else
Operation = DropOperation.CopyFromHere
End If
source to share
This is a conditional operator, it is very similar to the VB function IIf
:
Returns one of two objects, depending on the evaluation of the expression.
Public Function IIf( _
ByVal Expression As Boolean, _
ByVal TruePart As Object, _
ByVal FalsePart As Object _
) As Object
In this particular example, the function IIf
would be written like this:
Operation = IIF((operation = DropOperation.MoveToHere), _ DropOperation.MoveFromHere, _ DropOperation.CopyFromHere)
source to share
operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
This is called the ternary operator. This is basically a short way of writing:
if (operation == DropOperation.MoveToHere)
return DropOperation.MoveToHere;
else
return DropOperation.CopyFromHere;
source to share
It's called the ternary operator. I don't think it exists in VB, but it's basically a shorthand for if / else.
source to share