C#中是否有 IIf 等价物?或类似的捷径?

有帮助吗?

解决方案

C#拥有三元运算符,就像其他C风格的语言一样。但是,这并不完全等同于 IIf();有两个重要的区别。

为解释第一个区别,此 IIf()调用的false-part参数会导致 DivideByZeroException ,即使boolean参数为 True

IIf(true, 1, 1/0)

IIf()只是一个函数,和所有函数一样,在调用之前必须评估所有参数。换句话说, IIf()在传统意义上短路。另一方面,这个三元表达式确实是短路的,因此非常好:

(true)?1:1/0;

另一个区别是 IIf()不是类型安全的。它接受并返回 Object 类型的参数。三元运算符类型安全的。它使用类型推断来了解它正在处理的类型。请注意,您可以使用自己的通用 IIF(Of T)()实现轻松解决此问题,但开箱即用并非如此。

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

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

或通用/类型安全的实现:

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

另一方面,如果你想在VB中使用三元运算符,Visual Studio 2008及更高版本提供了一个新的 If() 运算符,就像C#的三元运算符一样。它使用类型推断来知道它返回的内容,它实际上是一个运算符而不是一个函数。这意味着预先计算表达式没有问题,即使它具有函数语义。

其他提示

VB.NET:

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

C#

someBool ? "true" : "false";

三元运算符

bool a = true;

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

合并运算符??:

也很有用

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-等效的-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#三元运算符来返回值。所以它不像if的缩写形式。 Javascript和其他一些语言可以让你把语句放在那里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top