我犯了很多次这个错误 - 当我快速工作并使用代码完成时就会发生这种情况。我最终得到如下代码:
public class Model : IModel
{
public PropertyNames PropertyNames { get; set; }
public Model(PropertyNames propertyNames)
{
PropertyNames = PropertyNames;
}
}
然后测试以稍微不那么明显的方式失败了,我感到很沮丧。
我只是好奇是否有合理的理由来编写这样的代码,如果没有,那么它是否会让一个好的候选人产生警告?
答案 0 :(得分:6)
我只是好奇是否有合理的理由来编写这样的代码,
根据你的看法,不幸的是有的。因为我们所讨论的标识符是属性,所以将属性分配给属性声音就像无操作,但它实际上调用方法,getter和setter,这些方法可能有副作用。
一个非常常见的特定情况是,如果setter执行属性通知或调用观察者,但是当你调用getter或setter时可能会发生任何事情。这就是代码不生成警告的原因:因为这种编码风格实际上很有用并且在生产代码中使用。
修改强>
通过比较,如果标识符是字段而不是属性,则会生成此警告:
警告CS1717:对同一变量进行分配;你的意思是分配其他东西吗?
答案 1 :(得分:3)
除了“它被视为有效指令”之外,没有理由使用它。也就是说,它也没有错:它符合赋值的语法。
如果您正在编写代码验证器,那么这是一个很好的警告候选者,尽管它当然不应该妨碍实际的编译;大多数编译器在字节码优化期间已经捕获了这种操作,其中删除了不执行任何控制逻辑但实际上不修改寄存器的指令。
答案 2 :(得分:3)
使用FxCop(又名代码分析),它会给你警告:
警告3 CA1801:Microsoft.Usage:从不使用'Model.Model(string)'的参数'propertyNames'。删除参数或在方法体中使用它。