2016-08-31 2 views
3

Wenn wir FxCop mit einem Supersatz der „Microsoft Alle Regeln“ ruleset für eines unserer Projekte auch CA1309 aktiviert und sofort aktiviert begann, über Konstruktionen beschweren wie folgt aus:Ist CA1309 immer noch gültig für die Quelle, die gegen .NET 4.5.1 kompiliert wurde?

if (translationItem.Description == "Description") 

Zeige Warnungen wie:

enter image description here Wenn bei der Bezugsquelle für stringhere suchen, zeigt es, dass die operator == verwendet String.Equals die wiederum EqualsHelper verwendet. Beim Aufruf der von CA1309 vorgeschlagenen Equals Überlastung wird dieselbe EqualsHelper aufgerufen. Daher scheint es, als ob der Operator == bereits den Ordinalvergleich verwendet.

Also meine Frage ist, sollten wir das Snippet oben in das Umgestalten:

if (string.Equals(translationItem.Description, "Description", StringComparison.Ordinal)) 

Und wenn ja, warum sollten wir?

P.S. Wir beabsichtigen tatsächlich, in den obigen Snippets einen Vergleich zwischen Groß- und Kleinschreibung zu verwenden.

S.S.2. Wir verwenden das nugget-Paket Microsoft.CodeAnalysis.FxCopAnalyzers, um Code-Analysen on-the-fly auszuführen.

+0

Ist die Eigenschaft (oder das Feld) '.Description' als' Objekt' oder ein Schnittstellentyp deklariert? _Bearbeiten: _ Wenn Sie die Maus über das Token '==' in Ihrem Code halten, zeigt ein Tooltipp 'bool object.operator == (Objekt links, Objekt rechts)'? –

+0

Es ist eine String-Eigenschaft – Vincent

+0

Mit der String-Eigenschaft deklariert als 'public string Beschreibung {get; einstellen; } ', Vergleich mit dem Operator" == "und dem Regelsatz" Microsoft All Rules "in VS Pro 2015 Update 3, ich bekomme keine Warnung. Sind Sie sicher, dass sich die Warnung auf die Codezeile bezieht, von der Sie denken, dass sie funktioniert? – cynic

Antwort

Verwandte Themen