2011-12-05 28 views
0

的最后部分返回值是否有办法有三元运算符一样做这个?:有没有办法不从三元运算

if (SomeBool) 
    SomeStringProperty = SomeValue; 

我可以这样做:

SomeStringProperty = someBool ? SomeValue : SomeStringProperty; 

但是,即使SomeBool为false(右),这将触发SomeStringProperty的getter和settor?所以它不会和上面的说法一样。

我知道解决方案是不使用三元运算符,但我只是想知道是否有办法忽略表达式的最后部分。

+0

如果用'Console.WriteLine('? – SLaks

+2

)代替'SomeStringProperty ='那该怎么办?这就像是问我可以用减法运算符来划分吗? – Will

+0

三元运算符不是问题。问题是你想要抑制与三元运算符无关的*赋值操作,并且抑制赋值操作的方法是不执行赋值操作 –

回答

2

这是接近你会得到办成一样的IF语句,但ü必须存储三元表达式的结果;即使你不真正使用它......

完整的示例:

namespace Blah 
{ 
public class TernaryTest 
{ 
public static void Main(string[] args) 
{ 
bool someBool = true; 
string someString = string.Empty; 
string someValue = "hi"; 
object result = null; 

// if someBool is true, assign someValue to someString, 
// otherwise, effectively do nothing. 
result = (someBool) ? someString = someValue : null; 
} // end method Main 
} // end class TernaryTest 
} // end namespace Blah 
5

这没有任何意义。

三元运算符是一个表达式。
必须有一个表达式总是有一个值,unless the expression is used as a statement(三元运算符不能)。

你不能写SomeProperty = nothing

+0

在VB中你可以, –

+0

@HenkHolterman:我不是指'Nothing'一个关键字;我的意思是_nothing_,因为它没有改变数值 – SLaks

+1

我知道'SomeProperty =;'可能已经更清楚了,但C#确实有[void expressions](http://stackoverflow.com/a/2030141/60761) 。所以一个表达式并不总是有价值的,但是在'?:'中它们必须。 –

1

我认为你正在寻找的东西像短路评价(http://en.wikipedia.org/wiki/Short-circuit_evaluation)与C#三元运算符。

我相信你会发现答案是否定的。

相比谁低估了它,我认为这是一个有效的问题。

相关问题