0

Мне интересно, почему анализ статического кода (VS 2015) не приведет к ошибке, если вы используете String.Equals (string). ТакCA1307: Укажите StringComparison, не выбрасываемый для string.Equals (string)

"file".Equals("FILE") 

не приводит к ошибкам анализа кода, в то время как

String.Compare("file", "FILE", true) 

действительно приводит к CA 1307 ошибки.

документация для этого правила говорит о MSDN

Многих строковых операций, самый важными Сравнения и Равно методов обеспечивают перегрузку, которая принимает значение перечисления StringComparison в качестве параметра.

Всякий раз, когда существует перегрузка, которая принимает параметр StringComparison, она должна использоваться вместо перегрузки, которая не принимает этот параметр. Явным образом задавая этот параметр, ваш код часто становится более понятным и простым в обслуживании.

От этого я ожидаю, что первый пример должен привести к ошибке CA 1307.

Так что, если вы не ошиблись в этом случае, это может быть очень опасно в некоторых случаях и привести к «ошибкам» приложений.

Я что-то упустил?

Если это по дизайну, есть ли способ, которым я могу достичь ожидаемого поведения?

ответ

1

Ваш метод сравнения вы проходите через boolean, тогда как функция Compare ожидает значение перечисления StringComparison.

String.Compare("file", "FILE", StringComparison.InvariantCultureIgnoreCase); 

Это должно вернуть истинный ответ, потому что вы игнорируете случай.

+0

Извините, но это не ответ на мой вопрос. А спрашивал, почему первый пример «файл» .Equals («ФАЙЛ») не вызывает ошибку CA 1307, когда параметр String.Comparison не указан. – donttellya