可能重复:
cif中的iif等价物
我IIf在VB中使用了几行代码,我试图将此代码转换为C#.
这是我需要帮助的一个例子:
intCurrency = IIf(or.Fields("Currency").Value = "USD", 100, 0)
Run Code Online (Sandbox Code Playgroud)
如何将上面的代码行更改为C#?C#中是否有短路评估操作符?
Jar*_*Par 38
有几个人建议它接近 C#三元/条件运算符,但它不是一个确切的替代品.C#三元运算符执行短路评估,这意味着只会发生评估子句的副作用.在VB.Net中,该Iif功能不实现短路,并将评估两种副作用.
另外Iif,VB.Net中的函数是弱类型的.它接受并返回键入的值Object.C#三元运算符是强类型的.
您可以写的最接近的等价物如下.将值放入参数会强制评估其副作用.
public static object Iif(bool cond, object left, object right) {
return cond ? left : right;
}
Run Code Online (Sandbox Code Playgroud)
或稍微更有用
public static T Iif<T>(bool cond, T left, T right) {
return cond ? left : right;
}
Run Code Online (Sandbox Code Playgroud)
jos*_*736 16
是的,这是问号(AKA是条件运算符).
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
Run Code Online (Sandbox Code Playgroud)
IIf这是令人难以置信的迂腐,但C# 中最接近的等价物是
intCurrency = ((Func<bool, object, object, object>)((x, y, z) => x ? y : z))(or.Fields["Currency"].Value == "USD", 100, 0);
Run Code Online (Sandbox Code Playgroud)
不过,我不知道你是否真的对VB的三元运算符感兴趣。所以在VB中如下
intCurrency = IIf(or.Fields("Currency").Value = "USD", 100, 0)
Run Code Online (Sandbox Code Playgroud)
可以更好地写成(注意IIf和之间的区别If)
intCurrency = If(or.Fields("Currency").Value = "USD", 100, 0)
Run Code Online (Sandbox Code Playgroud)
这与 C# 中的完全相同
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;
Run Code Online (Sandbox Code Playgroud)
另一个有趣的点是它If兼作空合并运算符。
Dim text As String = Nothing
text = If(text, "Nothing")
Run Code Online (Sandbox Code Playgroud)
这与 C# 中的完全相同
string text = null;
text = text ?? "null";
Run Code Online (Sandbox Code Playgroud)