使用三元运算符的缺点

时间:2010-11-10 21:58:59

标签: c#-4.0

我的源代码中有以下声明

int tableField1;
int tableField2;

int propertyField1;
int propertyField2;

if (tableField1 != null)
{
  propertyField1 = tableField1;
}

if (tableField2 != null)
{
  propertyField2 = tableField1;
}

// the above pattern is repeated for 10 tablefields ie tableField3, tableField4... tableField10

我使用三元运算符减少了上述数据,如下所示

propertyField1 = tableField1 != null ? tableField1 : propertyField1;
propertyField2 = tableField2 != null ? tableField2 : propertyField2;

以下是我的问题:

1)三元运算符的使用效率低于if语句。

2)使用三元运算符有什么缺点(如果有的话)。

3 个答案:

答案 0 :(得分:11)

为什么不使用空合并运算符呢?

propertyField1 = tableField1 ?? propertyField1;

不可否认,它看起来稍微奇数将原始值分配回同一个变量。有可能它的效率会比if语句略低,因为理论上你正在阅读它并重新分配它......但如果JIT将其删除,我也不会感到惊讶。无论如何,这绝对是微观优化的水平。

有些人认为条件运算符对可读性不好 - 我一般认为这对于这样的简单语句来说很好,尽管 有点模糊了“只有在我们改变价值时才有意义”得到了一个新的“。

答案 1 :(得分:3)

1)不,编译器将(应该)以与显式if语句完全相同的方式处理三元运算符,因此效率没有差别。

2)唯一的缺点是它会使你的代码更难阅读。另一方面,它更简洁。除了非常简单的情况外,一般来说,出于可读性原因,请避免使用三元语句。这可能算是一个非常简单的案例。

我声称这个答案比Jon Skeet更加语言无关:)

答案 2 :(得分:0)

据我了解,三元语句主要只是语法糖,尽管编译器可以对其进行优化。

在这种情况下,我认为它可能会更有效率,但我猜测编译器会将其优化为与if语句大致相同。

缺点?嗯,在某些情况下可能更难阅读。这取决于你要去的东西。