Должен ли я подавить CA2204: литералы должны быть написаны правильно? - PullRequest
5 голосов
/ 18 мая 2010

Я недавно обновил свой проект с Visual Studio 2008 до Visual Studio 2010.

Включив Анализ кода, я получаю много предупреждений, приведенных в правиле CA2204: Литералы должны быть написаны правильно.

EDIT

Допустим, у меня есть метод с именем GetResult(), и в нем я хочу по какой-то причине вызвать исключение. Я хочу, чтобы исключение сказал "GetResult() has failed for some reason". Это даст мне предупреждение, так как GetResult - это не слово. Я не получу предупреждение о названии метода GetResult(), только если я положу его в строку. Это потому, что Get и Result являются законными словами.

Я не верю, что написание GetResult() has failed for some reason - это решение.

РЕДАКТИРОВАТЬ : В MSDN написано:

Это правило разбирает буквенную строку в слова, токенизация составных слов , и проверяет орфографию каждого слово / маркер.

Не означает ли это, что GetResult должен быть проверен как два слова: "Получить" и "Результат"?

Должен ли я подавить CA2204?

Ответы [ 4 ]

5 голосов
/ 18 мая 2010

"Can't initialize MyClass" плохое сообщение для разработчика, чтобы вводить в код.Это редко помогает в отладке, и это только сбивает с толку конечного пользователя, если он когда-либо отображается.

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

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

РЕДАКТИРОВАТЬ: Включая правки OP
Что-то, что вы можете извлечь из этого предупреждения, это то, что вы не должны раскрывать детали кода как часть сообщения об ошибке (прежде всего потому, что они будут включены в стек вызовов при регистрации исключения).

GetResult() has failed for some reason
Скажем, «некоторая причина» - это разрешения.Сообщение может выглядеть следующим образом:

У вас нет прав для просмотра этих результатов.

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

4 голосов
/ 18 мая 2010

Один из способов исправить это - не добавлять имя типа в строку напрямую. Вместо этого передайте это как параметр. Например

var msg = String.Format("Can't initialize {0}", typeof(MyClass).Name);

Преимущество этого заключается в том, чтобы обойти правило FxCop и быть безопасным для рефакторинга.

2 голосов
/ 18 мая 2010

Может быть, вы не должны ставить имя класса в буквальном? Как насчет использования или определения исключения, которое может быть выдано следующим образом:

throw new CantInitializeClassException(innerException, typeof(MyClass);

Моя идея состояла в том, чтобы перенести больше информации в более конкретные исключения из более общих. Я предлагаю использовать образец выше вместо throw new ApplicationException("Cant initialize MyClass");

1 голос
/ 12 апреля 2013

CA2204 это все о правописании. К сожалению, даже в VS2012 у него все еще есть старая досадная ошибка, из-за которой он не может токенизировать составные слова: http://connect.microsoft.com/visualstudio/feedback/details/521030

Это заставило меня отключить это правило в нашем наборе правил анализа кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...