2

我有以下代码片段:

        // 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语法等价的东西就是我所需要的。

赛斯

4

10 回答 10

15

之所以难以理解,是因为你对三元运算符 ?: 不熟悉。基本上它所做的是评估一个表达式,并根据评估返回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 是一个函数而不是一个运算符。出于这个原因,三元运算符更受欢迎。

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

于 2009-09-11T20:07:51.607 回答
7
If (operation = DropOperation.MoveToHere) Then
    Operation = DropOperation.MoveFromHere
Else
    Operation = DropOperation.CopyFromHere
End If
于 2009-09-11T20:01:38.037 回答
3

强制性维基百科链接。我放弃了在评论中提到这个链接,所以这里是一个答案。您可以替换 ? 调用 IIF 函数的运算符:

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

请注意,它们不是严格等价的,因为 IIF函数同时评估真假情况,而 ? 运算符仅评估它返回的情况。

于 2009-09-11T20:05:06.677 回答
3

它相当于 VB.NET 中的函数IIf(参见 Brian 的评论):

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

在 C# 中,这称为条件运算符,是简单 if/else 语句的一种快捷方式。

于 2009-09-11T20:05:55.130 回答
2

这是使用?运算符进行条件赋值。这一行基本上是语法糖:

// 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
于 2009-09-11T20:01:12.750 回答
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)
于 2009-09-11T20:04:23.060 回答
1
operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere

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

if (operation == DropOperation.MoveToHere)
  return DropOperation.MoveToHere;
else
  return DropOperation.CopyFromHere;
于 2009-09-11T20:03:01.577 回答
1

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

于 2009-09-11T20:04:23.450 回答
1

C# Bloggers 使用“?” 很多。看这段代码:

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”我喜欢这个词)

于 2009-09-11T20:17:23.793 回答
0

它被称为三元运算符。我不认为它存在于 VB 中,但它基本上只是 if/else 的简写。

于 2009-09-11T20:04:06.740 回答