我负责在组织内创建编码标准和进行代码审查.
我在源代码中遇到了这样的东西:
object.Property = myVar1 = myVar2;
Run Code Online (Sandbox Code Playgroud)
我个人并不是这样做的,因为我发现它令人困惑.我看到这个,我想这样读:
object.Property = myVar1 == myVar2;
Run Code Online (Sandbox Code Playgroud)
现在我知道它在做什么:它将myVar分配给myVar2,然后将object.Property分配给myVar2.编码标准文档没有明确说明您是否可以这样做.但它确实声明不在if语句中分配变量.
我想我的问题是,作为一种编码实践而不是这样做的风格是不是很糟糕?我不喜欢制定代码标准政策"仅仅因为我这么说"
编辑以更好地解释我的理解
我总是在括号中包含等式表达式:
object.Property = (myVar1 == myVar2);
Run Code Online (Sandbox Code Playgroud)
这引起了人们的注意,这不是一项任务.
这种所谓的"链式任务"确实存在争议,并且有很多关于SO的问题可以解决它.
正如你所知,它是作为表达而不是陈述的赋值的副产品,对许多人来说,它可能令人困惑.
它对很多语言来说对新手来说有些危险.在语言中,它[]是空数组对象的构造函数,写作
a = b = []
Run Code Online (Sandbox Code Playgroud)
制作a并b引用同一个对象.新手倾向于认为它创建了两个独立的空数组,可以独立填充.不是这样!C#等价物,
a = b = new SomethingOrOther();
Run Code Online (Sandbox Code Playgroud)
可以说是不太可能发生,因为a并且b更有可能在声明时初始化,并且这种双重赋值会更少,而且C#程序员更有可能在这种情况下看到明显的共享.
制定禁止此行为的一个很好的理由是三方面的:
当您遇到容易出错的构造时,您应该避免使用它们,因为在避免它们时,您将永远不会发生该特定错误.当然,在C#中,它可能比其他语言更不容易出错.