有没有一种方法可以不从三元运算符的最后一部分返回值?



是否有一种方法可以让三元运算符做同样的事情?:

if (SomeBool)
  SomeStringProperty = SomeValue;

我可以这样做:

SomeStringProperty = someBool ? SomeValue : SomeStringProperty;

但这将触发getter和setter SomeStringProperty即使SomeBool是假的(对吗)?因此,它与上面的语句不一样。

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

这没有意义。

三元操作符为表达式。
表达式必须总是有值,除非该表达式用作语句(三元操作符不能用作语句)。

不能写SomeProperty = nothing

这是你能得到的与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 

我想你是在寻找类似c#三元运算符的短路求值(http://en.wikipedia.org/wiki/Short-circuit_evaluation)。

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

与那些投反对票的人相比,我认为这是一个有效的问题。

最新更新