0

有没有办法让三元运算符做同样的事情?:

if (SomeBool)
  SomeStringProperty = SomeValue;

我可以这样做:

SomeStringProperty = someBool ? SomeValue : SomeStringProperty;

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

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

4

3 回答 3

5

这是没有意义的。

三元运算符是一个表达式。
表达式必须始终具有值,除非表达式用作语句(三元运算符不能)。

你不能写SomeProperty = nothing

于 2011-12-05T17:13:44.027 回答
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 
于 2011-12-05T17:25:49.893 回答
1

我认为您正在寻找类似 C# 三元运算符的短路评估 (http://en.wikipedia.org/wiki/Short-circuit_evaluation)。

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

与否决它的人相比,我认为这是一个有效的问题。

于 2011-12-05T18:59:42.270 回答