FXCop 违规 CA1716 IdentifiersShouldNotMatchKeyword

Posted

技术标签:

【中文标题】FXCop 违规 CA1716 IdentifiersShouldNotMatchKeyword【英文标题】:FXCop violation CA1716 IdentifiersShouldNotMatchKeyword 【发布时间】:2010-03-03 11:16:17 【问题描述】:

我们最近开始在我们的代码库中使用 FxCop,我正在评估这些问题。一是 IdentifiersShouldNotMatchKeywords 问题。这适用于命名空间 company.blah.Event,它希望我将其更改为其他内容,因为 event 是一个关键字。 The docs说:

何时取消警告 不要禁止来自该规则的警告。该库可能无法用于 .NET Framework 中的所有可用语言。

什么情况下可能不可用?我需要改变这个吗?我想它不会很受欢迎。

【问题讨论】:

【参考方案1】:

不同的语言有不同的关键字。例如,我可以在 C# 中使用If 作为变量,但是如果有人在 VB 中加载项目,他们就搞砸了,这样的任何情况都会导致问题。

为了安全起见,我会更改它。如果其他人正在使用您的库,我会说您需要更改它,您不知道这样做时他们将使用什么语言。

【讨论】:

【参考方案2】:

嗯,这是一个有点古怪的信息。它宣称知道关键字在尚未成文的语言中将是什么。据您所知,像 BrainFart 这样的未来语言可能会使用 Acme 作为关键字,而您被搞砸了,因为那恰好是您的公司名称。

Acme 和 Event 关键字之间存在显着差异。 BrainFart 语言的作者会指出,您应该知道 Event 是通过 FxCop 运行代码的问题。她会赢得这场争论。

你最好改一下。

【讨论】:

如果你看我的例子,它也适用于当前的语言。用 C# 编写一个库……创建一个 VB.Net 项目,引用该 C# 程序集……如果它是关键字,则使用该标识符会立即出现问题。 @Nick:我不重复,VB.NET 编译器仍然将“If”视为上下文关键字。这编译得很好:Dim obj2 As New CSharp.If.Class1。但这并不是我这篇文章的真正重点。

以上是关于FXCop 违规 CA1716 IdentifiersShouldNotMatchKeyword的主要内容,如果未能解决你的问题,请参考以下文章

为啥 FxCop 不报告 CA2000 对于这种未处置的类实例的琐碎情况?

代码分析/FxCop CA1726:UsePreferredTerms 显示已取消为已弃用

为啥 FxCop 将 GC.KeepAlive() 标记为违规?

泛型类型的 FXCop 违规

不可变只读引用类型和 FXCop 违规:不要声明只读可变引用类型

FxCop 'Specify IFormat Provider' 是不是应该捕获 Int32.TryParse 违规?