iif等效于c#
在C#
有相当于IIf
吗? 或者类似的捷径?
C#有“?” 三元运算符,就像其他C语言一样。 但是,这并不完全等同于iif。 有两个重要的区别。
为了解释第一个,即使expression式为真,这个iif()
调用也会导致DivideByZeroexception,因为iif
只是一个函数,在调用之前必须计算所有参数:
iif(true, 1, 1/0)
换句话说,就像你的问题所表明的那样,iif 不是传统意义上的短路。 另一方面,这个三元的expression确实如此:
(true)?1:1/0;
另一个区别是iif
不是types安全的。 它接受并返回object
types的参数。 三元运算符使用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和其他一些语言可以让你把语句放在那里。