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