Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请向vber解释C#语法_C#_Vb.net_Syntax_Ternary Operator - Fatal编程技术网

请向vber解释C#语法

请向vber解释C#语法,c#,vb.net,syntax,ternary-operator,C#,Vb.net,Syntax,Ternary Operator,我有以下代码片段: // Notify the source (the other control). if (operation != DropOperation.Reorder) { e = new DroppedEventArgs() { Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveF

我有以下代码片段:

        // 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语法等价物是我所需要的

Seth

这是使用条件赋值。这一行基本上是用于:

// 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
这被称为三元运算符。这基本上是一种简短的写作方式:

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

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

这是条件运算符,它与VB的函数非常相似:

Operation = IIF(operation = DropOperation.MoveToHere, DropOperation.MoveFromHere, DropOperation.CopyFromHere)
返回两个对象之一,具体取决于表达式的计算

在此特定示例中,
IIf
函数的编写方式如下:

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

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

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

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

注意,它们不是严格等价的,因为IIF函数同时计算真和假情况,而运算符只计算它返回的大小写。

它在某种程度上相当于VB.NET中的函数(参见Brian的注释):


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

之所以难以理解,是因为您不熟悉三元运算符:。基本上,它所做的是计算一个表达式,并根据计算结果是返回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和十进制运算符之间的区别在于,IIf将始终计算第二个和第三个参数,因为IIf是函数而不是运算符。出于这个原因,十进制运算符更受欢迎

注意:十进制运算符是在VB9中添加的,因此如果使用以前的版本,则必须依赖IIF函数来实现此功能

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

请注意,它们不是严格等价的,因为IIF函数同时计算true和false,而?运算符只计算它返回的大小写。@布赖恩:因此文本排序是等价的,但您的注释仍然增加了很好的值。尽管If()是严格等价的。没有理由使用Iif,除非你使用的是旧版本的VB。Iif也不是类型安全的。不应使用Iif函数,因为它会计算两个表达式。十进制运算符不匹配。VB9有一个新的三进制If运算符,这是一个更好的匹配。@Qua:在这种情况下可以。正确和错误的部分只是枚举。这是正确的,没有太多关注优化,值得一提的是,十进制运算符是一个。。。运算符,这意味着没有函数开销,而不是IFF。对不起,投票失败了,但Qua的答案应该比这个分数高。@Joel Coehoorn:这是我听过的最奇怪的原因,但鉴于我只丢了2分,我不会对此大惊小怪:-)我总是回来检查这些。对你的帖子进行无操作编辑,我现在就可以撤销否决票了。有趣的是,我不知道这一点(我已经好几年没有编写VB.NET了)。这个函数肯定比IIf函数更可取,因为它使用短路评估。+1表示If而不是IIf!!!!另外,如果你有类型安全的优势,你就不需要进行强制转换。我认为你的代码中有一个输入错误。我看不到
Iif
,只有
If
。这不是打字错误,If()是VB9的三元运算符。谢谢你,因为…这样做了。谢谢你给我上的关于vb三元运算的课。我对iif非常熟悉。很高兴知道现在有一个简短的循环版本。但是SethIf()是严格等价的。没有理由使用Iif,除非你使用的是旧版本的VB。Iif也不是类型安全的。
Dim s As String = If(True, "kek", "lol")
string s = true ? "kek" : "lol";
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;
}