【发布时间】:2016-08-31 10:19:48
【问题描述】:
当我们为我们的一个项目启用带有“Microsoft 所有规则”规则集的超集的 fxcop 时,它也启用了 CA1309,并立即开始抱怨这样的结构:
if (translationItem.Description == "Description")
显示警告,例如:
查看stringhere 的参考源时,它显示operator == 使用String.Equals,而String.Equals 又使用EqualsHelper。在调用 CA1309 提出的 Equals 重载时,同样会调用 EqualsHelper。因此,== 运算符似乎已经使用了序数比较。
所以我的问题是,我们是否应该将上面的 sn-p 重构为:
if (string.Equals(translationItem.Description, "Description", StringComparison.Ordinal))
如果是这样,我们为什么要这样做?
附:我们确实打算在上面的 sn-ps 中使用区分大小写的字符串比较。
附注 2。我们使用Microsoft.CodeAnalysis.FxCopAnalyzers nuget 包即时运行代码分析。
【问题讨论】:
-
属性(或字段)
.Description是否声明为object或某种接口类型? 编辑: 等效地,当您将鼠标悬停在代码中的==标记上时,工具提示是否会显示bool object.operator ==(object left, object right)? -
这是一个字符串属性
-
将字符串属性声明为
public string Description { get; set; },使用==运算符进行比较,以及VS Pro 2015 Update 3 中的“Microsoft 所有规则”规则集,我没有收到警告。您确定警告指的是您认为的代码行吗? -
啊,对了,我忘了提到我们在“Microsoft 所有规则”集之上启用了更多规则,其中包括 CA1309,似乎会更新问题。我正在使用 VS Enterprise 2015 Update 3。
-
我可以确认来自
Microsoft.CodeAnalysis.FxCopAnalyzersNuGet 包的规则实际上已被触发,而来自内置 VS 代码分析功能的相同规则并未触发。 NuGet 包似乎是一个预览版 - 为什么不打开 issue on GitHub?
标签: c# visual-studio-2015 fxcop