代码之家  ›  专栏  ›  技术社区  ›  Seth Spearman

请向VB ER解释C语法

  •  2
  • Seth Spearman  · 技术社区  · 16 年前

    我有以下代码段:

            // 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语法等价物吗?

    赛斯

    10 回复  |  直到 16 年前
        1
  •  15
  •   Kasper Holdum    16 年前

    很难理解的原因是你不熟悉三元运算符?:。基本上,它所做的是计算表达式,并根据计算是否返回返回两个值中的一个值 错误 .

    例如,如果布尔值为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和Tenary运算符的区别在于IIF总是同时计算第二个和第三个参数,因为IIF是函数而不是运算符。因此,租赁运营商更愿意选择。

    注释 :Tenary运算符是在Vb9中添加的,因此,如果使用以前的版本,则必须依赖IIF函数才能实现此功能。

        2
  •  7
  •   Cristian Ciupitu    16 年前
    If (operation = DropOperation.MoveToHere) Then
        Operation = DropOperation.MoveFromHere
    Else
        Operation = DropOperation.CopyFromHere
    End If
    
        3
  •  3
  •   Brian    16 年前

    Obligatory wikipedia link .我放弃了在评论中提到这个链接,所以这里是一个答案。您可以替换的用途吗?调用IIF函数的运算符:

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

    请注意,它们不是严格等效的,因为IIF 功能 判断是非,而? 操作人员 只评估它返回的情况。

        4
  •  3
  •   Fredrik Mörk    16 年前

    它是 某种程度上 相当于 IIf vb.net中的函数(参见brian的注释):

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

    在C中,这被称为 conditional operator ,是简单if/else语句的一种快捷方式。

        5
  •  2
  •   Andrew Hare    16 年前

    这是条件运算符,与vb非常相似 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)
    
        6
  •  2
  •   Donut    16 年前

    这是使用 ? operator 用于有条件分配。这一行基本上是句法上的糖分:

    // 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
    
        7
  •  1
  •   Aistina    16 年前
    operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
    

    这被称为三元运算符。这基本上是一种简短的写作方式:

    if (operation == DropOperation.MoveToHere)
      return DropOperation.MoveToHere;
    else
      return DropOperation.CopyFromHere;
    
        8
  •  1
  •   pbh101    16 年前

    这个 ?: 构造是三元运算符,基本上是内联的 if (x) y else x . 这里可以看到内联的好处,它被立即分配给一个变量。你不能用if语句来实现这一点。

        9
  •  1
  •   Broken_Window    16 年前

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

    读一下解释得很好的甜甜圈的答案!!

    (我喜欢这个词)

        10
  •  0
  •   BFree    16 年前

    它叫做 ternary operator. 我不认为它存在于vb中,但它基本上只是if/else的简写。