Когда мы включили FxCop с надмножеством «Microsoft Все правила» набора правил для одного из наших проектов также позволило CA1309 и сразу же начал жаловаться конструкций, таких, как это:Действительно ли CA1309 действителен для источника, скомпилированного с .NET 4.5.1?
if (translationItem.Description == "Description")
Отображение предупреждений, таких как:
при взгляде на опорный источник для
string
here, это показывает, что operator ==
использует String.Equals
, который в свою очередь использует EqualsHelper
. При вызове перегрузки Equals
, предложенной CA1309, вызывается то же самое EqualsHelper
. Следовательно, похоже, что оператор ==
уже использует сравнение ординалов.
Так что мой вопрос, мы должны реорганизовать фрагмент кода выше в этом:
if (string.Equals(translationItem.Description, "Description", StringComparison.Ordinal))
И если да, то почему мы должны?
P.S. Мы действительно намереваемся использовать сравнение строк с учетом регистра в приведенных выше фрагментах.
P.S.2. Мы используем пакет nuget Microsoft.CodeAnalysis.FxCopAnalyzers
для оперативного анализа кода.
Является ли свойство (или поле) '.Description' объявленным как' object' или какой-либо тип интерфейса? _Edit: _ Эквивалентно, когда вы наводите мышь на токен '==' в вашем коде, появляется подсказка на инструменте 'bool object.operator == (объект слева, правый объект)'? –
Это свойство строки – Vincent
Со значением свойства string, объявленным как 'public string Описание {get; задавать; } ', сравнение с использованием оператора' == 'и набора правил Microsoft All Rules в VS Pro 2015 Update 3, я не получаю предупреждение. Вы уверены, что предупреждение относится к строке кода, который, по вашему мнению, он делает? – cynic