什么是C#中的IIF?

时间:2010-08-27 18:09:25

标签: c# .net vb.net

  

可能重复:
  iif equivalent in c#

我在VB中使用IIf有几行代码,我试图将此代码转换为C#。

以下是我需要帮助的示例:

intCurrency = IIf(or.Fields("Currency").Value = "USD", 100, 0)

如何将上面的代码行更改为C#? C#中是否有短路评估操作符?

9 个答案:

答案 0 :(得分:38)

对于C#三元/条件运算符 close 正如几个人所建议的那样,但它并不是一个确切的替代品。 C#三元运算符执行短路评估,这意味着只会发生评估子句的副作用。在VB.Net中,Iif函数不实现短路,并将评估两种副作用。

另外,VB.Net中的Iif函数是弱类型的。它接受并返回键入为Object的值。 C#三元运算符是强类型的。

您可以写的最接近的等价物如下。将值放入参数会强制评估其副作用。

public static object Iif(bool cond, object left, object right) {
  return cond ? left : right;
}

或稍微更实用

public static T Iif<T>(bool cond, T left, T right) {
  return cond ? left : right;
}

答案 1 :(得分:16)

是的,这是问号(A.K.A conditional operator)。

intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;

答案 2 :(得分:4)

这非常迂腐,但C#中最接近的IIf

intCurrency = ((Func<bool, object, object, object>)((x, y, z) => x ? y : z))(or.Fields["Currency"].Value == "USD", 100, 0);

但是,我想知道你是否真的对VB的三元运算符感兴趣。所以VB中的以下内容

intCurrency = IIf(or.Fields("Currency").Value = "USD", 100, 0) 

可以更好地写成(注意IIfIf之间的差异)

intCurrency = If(or.Fields("Currency").Value = "USD", 100, 0) 

在C#中与

完全相同
intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;

另一个有趣的观点是If兼作空合并运算符。

Dim text As String = Nothing
text = If(text, "Nothing")

在C#中与

完全相同
string text = null;
text = text ?? "null";

答案 3 :(得分:3)

我知道其他人已经回答了这个......但我想我会澄清一下。如果您对更多阅读感兴趣,则称为ternary operator或通常称为条件运算符。

答案 4 :(得分:2)

这是?:运营商。

 or.Fields["Currency"].Value == "USD" ? 100 : 0;

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

答案 5 :(得分:1)

intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;

答案 6 :(得分:1)

您可以使用?:运算符执行等效代码:

intCurrency = or.Fields["Currency"].Value = "USD" ? 100 : 0;

答案 7 :(得分:1)

正如其他人所说,你正在寻找conditional operator

intCurrency = or.Fields["Currency"].Value == "USD" ? 100 : 0;

然而,作为纠正点,这不是“短路评估”。短路评估意味着一旦可以可靠地确定布尔表达式,就不会进行进一步的评估(这相当于在true表达式中遇到or条件或在false条件中遇到and条件if表达式。)

虽然可以在条件运算符中组合布尔表达式,就像在其他任何事情中一样(如Iif语句),并且表达式将采用短循环评估,但它不会使用条件运算符无法做任何事情本身

值得注意的一个重要区别是,虽然VB.NET的if函数同时评估了true和false表达式,但C#的条件运算符只计算布尔条件选择的表达式(使其表现得更像传统的{{1}}表达式)。如果VB.NET代码依赖于两个被评估的表达式,这可能很重要。

答案 8 :(得分:0)

or.Fields(“Currency”)。Value =“USD”? 100:0