Joe*_*orn 110
?
与其他C风格的语言一样,C#具有三元运算符.但是,这并不完全等同于IIf()
; 有两个重要的区别.
为了解释第一个区别,这个IIf()
调用的false-part参数会导致a DivideByZeroException
,即使boolean参数是True
.
IIf(true, 1, 1/0)
Run Code Online (Sandbox Code Playgroud)
IIf()
只是一个函数,和所有函数一样,在调用之前必须评估所有参数.换句话说,IIf()
确实没有短路传统意义上的.另一方面,这个三元表达式确实短路,因此非常好:
(true)?1:1/0;
Run Code Online (Sandbox Code Playgroud)
另一个区别是IIf()
不安全.它接受并返回类型的参数Object
.三元运算符是类型安全的.它使用类型推断来了解它正在处理的类型.请注意,您可以使用自己的通用IIF(Of T)()
实现轻松解决此问题,但开箱即用并非如此.
如果你真的想要IIf()
C#,你可以拥有它:
object IIf(bool expression, object truePart, object falsePart)
{return expression?truePart:falsePart;}
Run Code Online (Sandbox Code Playgroud)
或通用/类型安全的实现:
T IIf<T>(bool expression, T truePart, T falsePart)
{return expression?truePart:falsePart;}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果你想在VB中使用三元运算符,Visual Studio 2008及更高版本提供了一个像C#的三元运算符一样工作的新If()
运算符.它使用类型推断来知道它返回的内容,它实际上是一个运算符而不是一个函数.这意味着预先计算表达式没有问题,即使它具有函数语义.
Kev*_*ang 58
VB.NET:
If(someBool, "true", "false")
Run Code Online (Sandbox Code Playgroud)
C#
someBool ? "true" : "false";
Run Code Online (Sandbox Code Playgroud)
Ris*_*ams 12
三元运算符
bool a = true;
string b = a ? "if_true" : "if_false";
Run Code Online (Sandbox Code Playgroud)
同样有用的是coalesce运算符??:
VB:
Return Iif( s IsNot Nothing, s, "My Default Value" )
Run Code Online (Sandbox Code Playgroud)
C#:
return s ?? "My Default Value";
Run Code Online (Sandbox Code Playgroud)
小智 5
booleanExpression ? trueValue : falseValue;
Run Code Online (Sandbox Code Playgroud)
例:
string itemText = count > 1 ? "items" : "item";
Run Code Online (Sandbox Code Playgroud)
http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html
归档时间: |
|
查看次数: |
269355 次 |
最近记录: |