Seth Spearman
Seth Spearman

Reputation: 6790

Please explain C# syntax to a vb-er

I have the following 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);
        }

I do not understand the
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere line.

Can someone explain it? For the record...dropOperation is an enum. Can you give vb syntactical equivalent is all I need.

Seth

Upvotes: 2

Views: 639

Answers (10)

Cristian Ciupitu
Cristian Ciupitu

Reputation: 20930

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

Upvotes: 7

Kasper Holdum
Kasper Holdum

Reputation: 13373

The reason it's hard to understand is due to the fact that you're unfamiliar with the ternary operator ?:. Basically what it does is evaluate an expression, and return one of two value depending on whether the evaluation returned true or false.

For example, the following expression will return "true" if the boolean is true, and "false" elsewise:

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

It does in fact exist in VB.NET as well - expressed a bit differently though. These two statements in respectively C# and VB.NET are in fact 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 tenary operator is much to prefer.

Note: The tenary operator was added in VB 9, so if you're using previous versions you'll have to rely on the IIF function for this functionality.

Upvotes: 15

Broken_Window
Broken_Window

Reputation: 2091

C# Bloggers use the "?" a lot. Look this code:

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

Is equal to:

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

Just read the well explained Donut's answer!!

("VB-er" I like the term)

Upvotes: 1

Fredrik Mörk
Fredrik Mörk

Reputation: 158409

It is sort of equivalent of the IIf function in VB.NET (see Brian's comment):

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

In C# this is called the conditional operator, and is a sort of shortcut for a simple if/else statement.

Upvotes: 3

Brian
Brian

Reputation: 25844

Obligatory wikipedia link. I gave up on mentioning this link in a comment, so here it is in an answer. You can replace uses of the ? operator with calls to the IIF function:

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

Note that they are not strictly equivalent, since the IIF function evaluates both the true and the false case, whereas the ? operator only evaluates the case it returns.

Upvotes: 3

Donut
Donut

Reputation: 112915

This is using the ? operator 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

Upvotes: 2

pbh101
pbh101

Reputation: 10393

The ?: construct is the ternary operator, basically an inline if (x) y else x. The benefit of the inline is seen here in that it is assigned immediately to a variable. You can't do that with an if statement.

Upvotes: 1

Andrew Hare
Andrew Hare

Reputation: 351758

This is the conditional operator, it is very similar to VB's IIf function:

Returns one of two objects, depending on the evaluation of an expression.

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

In this particular example the IIf function would be written like this:

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

Upvotes: 2

BFree
BFree

Reputation: 103770

It's called the ternary operator. I don't think it exists in VB but it's basically just a shorthand for an if/else.

Upvotes: 0

Aistina
Aistina

Reputation: 12679

operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere

This is called the ternary operator. It's basically a short way of writing:

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

Upvotes: 1

Related Questions