Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 使用三元运算符的缺点_C# 4.0 - Fatal编程技术网

C# 4.0 使用三元运算符的缺点

C# 4.0 使用三元运算符的缺点,c#-4.0,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 1

我的源代码中有以下声明

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) 使用三元运算符有哪些缺点(如果有)。

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

propertyField1 = tableField1 ?? propertyField1;
诚然,将原始值赋回同一个变量看起来有点奇怪。有可能它的效率会比
if
语句稍微低一点,因为在理论上,您正在读取值并再次赋值。。。但如果JIT忽略了这一点,我也不会感到惊讶。无论如何,这绝对是在微观优化的层面上


有些人认为条件运算符对可读性是有害的。我一般认为这样简单的语句是好的,尽管它有点模糊了“只有当我们有了一个新的值时才改变它”的含义。

据我所知,三元语句大多只是句法糖,尽管编译器可以为此进行优化

在这种情况下,我相信它可能会更有效,尽管我猜编译器会优化它,使其与if语句大致相同

缺点?嗯,在某些情况下可能更难阅读。这取决于你在追求什么。

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

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


我声称这个答案比Jon Skeet的答案更不懂语言:)

我不同意你对第1点的评估。当
tableField1
为空时,if语句版本仅对
propertyField1
赋值。否则,该值将无法更改。从逻辑上讲,条件运算符版本将始终分配给
属性字段1
,可能是在读取同一字段之后。想象一下,另一个线程正在处理这些值-它可以在读取之后但在赋值之前为
propertyField1
分配一个新值。这样写的东西就可能丢失。对于
if
版本,这是不可能的。这很公平。尽管如此,作业还是很便宜的,所以除非这是一个紧密的循环,否则不会有太大的区别。我还假设了一个单线程系统。我并不认为我的答案比你的更正确:)谢谢你,乔恩。我不知道空合并。