【问题标题】:Is CA1309 still valid for source compiled against .NET 4.5.1?CA1309 对于针对 .NET 4.5.1 编译的源代码仍然有效吗?
【发布时间】: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.FxCopAnalyzers NuGet 包的规则实际上已被触发,而来自内置 VS 代码分析功能的相同规则并未触发。 NuGet 包似乎是一个预览版 - 为什么不打开 issue on GitHub

标签: c# visual-studio-2015 fxcop


【解决方案1】:

答案不多,但根据 cmets 愤世嫉俗的要求,an issue has been raised over at the roslyn github。该问题已解决并关闭,修复程序将与里程碑 15.3 一起发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2021-05-26
    相关资源
    最近更新 更多