我负责创建编码标准并在组织内进行代码审查。
我在源代码中遇到了如下问题:
object.Property = myVar1 = myVar2;
我个人不这样做,因为我感到困惑。我看到了,我想这样阅读:
object.Property = myVar1 == myVar2;
现在我知道它在做什么:它将myVar分配给myVar2,然后将object.Property分配给myVar2。编码标准文档没有明确说明您是否可以这样做。但是,它确实声明不在if语句内分配变量。
我想我的问题是,是否有足够糟糕的样式来作为编码实践来作废?我不喜欢制定代码标准策略,“只是因为我这么说”
编辑以更好地解释我的理解
最佳答案
这种所谓的“链式分配”确实存在争议,SO上有很多问题可以解决这个问题。
如您所知,它是赋值的副产品,它是表达而不是陈述,对于许多人来说,这可能会造成混淆。
它有许多语言,对新手来说有些危险。在[]
是空数组对象的构造函数的语言中,编写
a = b = []
使
a
和b
引用相同的对象。新手倾向于认为它制作了两个可以独立填充的空数组。不是这样!相当于C#a = b = new SomethingOrOther();
可以说发生的可能性要小得多,因为
a
和b
更有可能在声明时进行初始化,并且这样的双重赋值会很少,而且C#程序员更有可能看到明显的共享。这个案例。禁止这样做的一个很好的理由是三个方面:
完全没有必要。
这很容易出错(如上面的数组示例中所示)。
当您遇到容易出错的构造时,应该避免使用它们,因为在避免它们时,您永远不会犯该特定错误。当然,在C#中,与其他语言相比,它更容易出错。