有没有办法不从三元运算符的最后部分返回值

时间:2011-12-05 17:12:09

标签: c# .net ternary

有没有办法让三元运算符做到这一点?:

if (SomeBool)
  SomeStringProperty = SomeValue;

我可以这样做:

SomeStringProperty = someBool ? SomeValue : SomeStringProperty;

但即使SomeBool为false(右),这也会触发SomeStringProperty的getter和settor?所以它与上述陈述不同。

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

3 个答案:

答案 0 :(得分:5)

这没有任何意义。

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

你不能写SomeProperty = nothing

答案 1 :(得分: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 

答案 2 :(得分:1)

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

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

与贬低它的人相反,我认为这是一个有效的问题。