iif等效于c#

C#有相当于IIf吗? 或者类似的捷径?

C#有“?” 三元运算符,就像其他C语言一样。 但是,这并不完全等同于iif。 有两个重要的区别。

为了解释第一个,即使expression式为真,这个iif()调用也会导致DivideByZeroexception,因为iif只是一个函数,在调用之前必须计算所有参数:

 iif(true, 1, 1/0) 

换句话说,就像你的问题所表明的那样,iif 不是传统意义上的短路。 另一方面,这个三元的expression确实如此:

 (true)?1:1/0; 

另一个区别是iif不是types安全的。 它接受并返回objecttypes的参数。 三元运算符使用types推断来知道它处理的是什么types。 请注意,你可以用一个通用的实现来很容易地解决这个问题,但是就是这样。

如果你真的想在C#中使用iif(),你可以拥有它:

 object iif(bool expression, object truePart, object falsePart) {return expression?truePart:falsePart; } 

或通用/types安全的实现:

 T iif<T>(bool expression, T truePart, T falsePart) { return expression?truePart:falsePart;} 

另一方面,如果你想在VB中使用三元运算符,Visual Studio 2008和更高版本提供了一个新的If 运算符 ,它更像C#的三元运算符 。 它使用types推断来知道它返回的是什么,它是一个运算符而不是一个函数,所以不存在讨厌的零分问题。

VB.NET:

 If(someBool, "true", "false") 

C#

 someBool ? "true" : "false"; 

三元运算符

 bool a = true; string b = a ? "if_true" : "if_false"; 

coalesce操作符也是有用的。

VB:

 Return Iif( s IsNot Nothing, s, "My Default Value" ) 

C#:

 return s ?? "My Default Value"; 
 booleanExpression ? trueValue : falseValue; 

例:

 string itemText = count > 1 ? "items" : "item"; 

http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html

这是三元运算符?

 string newString = i == 1 ? "i is one" : "i is not one"; 

这是有限的,你不能把陈述在那里。 你只能把值(或返回/评估值的东西),返回

这有效('a'是类Blah内的静态int)

 Blah.a=Blah.a<5?1:8; 

(圆括号在等号和问号之间是非常重要的)。

这不起作用。

 Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er"); or Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er"); 

所以你只能使用c#三元运算符来返回值。 所以这不像是一个简短的forms。 JavaScript和其他一些语言可以让你把语句放在那里。