请向vb-er解释C#语法

时间:2009-09-11 19:59:44

标签: 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);
        }

我不明白 Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere行。

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

赛斯

10 个答案:

答案 0 :(得分:15)

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

例如,如果布尔值为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运营商更喜欢。

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

答案 1 :(得分:7)

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

答案 2 :(得分:3)

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

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

请注意,它们并不是严格等同的,因为IIF 函数会同时评估true和false的情况,而? 运算符仅评估它返回的大小写。

答案 3 :(得分:3)

它是等同于VB.NET中IIf函数的(参见Brian的评论):

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

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

答案 4 :(得分:2)

这是使用? 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

答案 5 :(得分:2)

这是条件运算符,它与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 :(得分:1)

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

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

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

答案 7 :(得分:1)

?:构造是三元运算符,基本上是内联if (x) y else x。内联的好处在于,它被立即分配给变量。你不能用if语句做到这一点。

答案 8 :(得分:1)

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

请仔细阅读Donut的回答!

(“VB-er”我喜欢这个词)

答案 9 :(得分:0)

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