【问题标题】:FXCop warning CA1801: "Parameter is never used..." on overridden inherited supressed propertyFXCop 警告 CA1801:“参数从不使用...”在被覆盖的继承抑制属性上
【发布时间】:2023-08-04 06:55:02
【问题描述】:

在继续清理我通过 stylecop 和 fxcop 继承的代码库的任务中,来自 fxcop 的警告之一是 CA1801:Something.MyProperty.set(string) 的参数“值”从未使用过。移除参数或在方法体中使用。

它抱怨的代码是:

public class Something : ISomeInterface
    public new string MyProperty
    {
        get
        {
            throw new InvalidOperationException("MyProperty is not implemented.");
        }

        set
        {
            throw new InvalidOperationException("MyProperty is not implemented.");
        }
    }

此属性是在接口中定义的,但在这种情况下,派生类中不需要 - 除了使用 InvalidOperationException 而不是 NotImplementedException(我认为这很常见)有点可疑之外,我想知道是否应该排除警告在 FXCop 中附注解释原因?

我看不出在最佳实践方面我还能做些什么来防止 FXCop 中的警告,除了将此特定属性重构到第二个接口中,然后更新使用此接口的所有其他类?我想我可能刚刚回答了我自己的问题? :D

【问题讨论】:

标签: interface properties fxcop suppress


【解决方案1】:

我相信您收到此警告是因为“新”关键字。尝试replace删除新的with override,看看警告是否消失。

public class Something : ISomeInterface
    public string MyProperty

顺便说一句,我建议也使用 NotImplementedException 而不是 InvalidOperationException。

【讨论】:

  • 实际上,将其更改为 override 似乎确实解决了它,但不完全确定我明白为什么! :D
  • 此外,这需要将基本属性定义为虚拟才能覆盖它。
  • @Andrew,啊……对不起,我错过了。由于它是一个界面,您可以删除新的。 New 将创建另一个方法签名并且不实现接口。