请向vb-er解释C#语法

Set*_*man 2 c# vb.net syntax ternary-operator

我有以下代码片段:

        // 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);
        }
Run Code Online (Sandbox Code Playgroud)

我不明白这
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere条线.

有人可以解释一下吗?记录...... dropOperation是一个枚举.你能给我vb语法等价物吗?

赛斯

Kas*_*dum 15

难以理解的原因是你不熟悉三元运算符?:.基本上它的作用是计算表达式,并根据评估返回truefalse返回两个值中的一个.

例如,如果布尔值为true,则以下表达式将返回"true",否则返回"false":

bool test = false;
string testString = test ? "true" : "false";
Run Code Online (Sandbox Code Playgroud)

事实上它确实存在于VB.NET中 - 尽管表达方式略有不同.分别在C#和VB.NET中的这两个语句实际上是相同的

Dim s As String = If(True, "kek", "lol")
string s = true ? "kek" : "lol";
Run Code Online (Sandbox Code Playgroud)

IIf和tenary运算符之间的区别在于IIf将始终评估第二个和第三个参数,因为IIf是函数而不是运算符.出于这个原因,Tenary运营商更喜欢.

注意:在VB 9中添加了tenary运算符,因此如果您使用的是以前的版本,则必须依赖IIF函数来实现此功能.

  • 有意思,不知道(我在几年内没有编写过VB.NET).鉴于使用短路评估,这个肯定比首选`IIf`功能更优先. (2认同)
  • 这不是一个错字,If()是VB9的三元运算符. (2认同)

Cri*_*itu 7

If (operation = DropOperation.MoveToHere) Then
    Operation = DropOperation.MoveFromHere
Else
    Operation = DropOperation.CopyFromHere
End If
Run Code Online (Sandbox Code Playgroud)