我负责创建编码标准并在组织内进行代码审查。

我在源代码中遇到了如下问题:

object.Property = myVar1 = myVar2;


我个人不这样做,因为我感到困惑。我看到了,我想这样阅读:

object.Property = myVar1 == myVar2;


现在我知道它在做什么:它将myVar分配给myVar2,然后将object.Property分配给myVar2。编码标准文档没有明确说明您是否可以这样做。但是,它确实声明不在if语句内分配变量。

我想我的问题是,是否有足够糟糕的样式来作为编码实践来作废?我不喜欢制定代码标准策略,“只是因为我这么说”

编辑以更好地解释我的理解

最佳答案

这种所谓的“链式分配”确实存在争议,SO上有很多问题可以解决这个问题。

如您所知,它是赋值的副产品,它是表达而不是陈述,对于许多人来说,这可能会造成混淆。

它有许多语言,对新手来说有些危险。在[]是空数组对象的构造函数的语言中,编写

a = b = []


使ab引用相同的对象。新手倾向于认为它制作了两个可以独立填充的空数组。不是这样!相当于C#

a = b = new SomethingOrOther();


可以说发生的可能性要小得多,因为ab更有可能在声明时进行初始化,并且这样的双重赋值会很少,而且C#程序员更有可能看到明显的共享。这个案例。

禁止这样做的一个很好的理由是三个方面:


完全没有必要。
这很容易出错(如上面的数组示例中所示)。


当您遇到容易出错的构造时,应该避免使用它们,因为在避免它们时,您永远不会犯该特定错误。当然,在C#中,与其他语言相比,它更容易出错。

10-06 13:53