Вопрос

У меня есть следующий фрагмент кода:

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

Я не понимаю, что
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere линия.

Кто-нибудь может это объяснить?Для справки ... dropOperation - это перечисление.Можете ли вы дать синтаксический эквивалент vb - это все, что мне нужно.

Сет

Это было полезно?

Решение

Причина, по которой это трудно понять, заключается в том, что вы не знакомы с троичным оператором ?:.В основном то, что он делает, это вычисляет выражение и возвращает одно из двух значений в зависимости от того, вернула ли оценка верно или ложь.

Например, следующее выражение вернет "true", если логическое значение равно true, и "false" в противном случае:

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

На самом деле это также существует в VB.NET - хотя и выражено немного по-другому.Эти два утверждения соответственно в C # и VB.NET фактически являются одним и тем же

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

Разница между IIf и тенарным оператором заключается в том, что IIf всегда будет оценивать как второй, так и третий параметр, поскольку IIf - это функция, а не оператор.По этой причине гораздо предпочтительнее использовать тенарный оператор.

Примечание:Оператор tenary был добавлен в VB 9, поэтому, если вы используете предыдущие версии, вам придется полагаться на функцию IIF для этой функциональности.

Другие советы

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

Обязательная ссылка на википедию.Я отказался от упоминания этой ссылки в комментарии, так что вот она в ответе.Вы можете заменить использование ?оператор с вызовами функции IIF:

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

Обратите внимание, что они не являются строго эквивалентными, поскольку IIF функция оценивает как истинный, так и ложный случай, тогда как ? оператор оценивает только тот случай, который он возвращает.

Это так вроде того эквивалент IIf функция в VB.NET (см. Комментарий Брайана):

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

В C # это называется условный оператор, и является своего рода сокращением для простого оператора if /else .

Это условный оператор, он очень похож на VB's IIf функция:

Возвращает один из двух объектов, в зависимости от вычисления выражения.

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

В этом конкретном примере IIf функция была бы написана следующим образом:

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

Это использование ? оператор для условного присвоения.Эта строка в основном является синтаксическим сахаром для:

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

Что в VB было бы эквивалентно:

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

Это называется троичным оператором.По сути, это краткий способ написания:

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

В ?: construct - это троичный оператор, в основном встроенный if (x) y else x.Преимущество inline здесь проявляется в том, что оно немедленно присваивается переменной.Вы не можете сделать это с помощью оператора if .

Блоггеры C # часто используют "?".Посмотрите на этот код:

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

Равно:

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

Просто прочтите хорошо объясненный ответ Пончика!!

("VB-er" Мне нравится этот термин)

Это называется троичный оператор. Я не думаю, что это существует в VB, но по сути это просто сокращение для if / else .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top