Надстройка Visual Studio для проверки строки. Метод формата - PullRequest
9 голосов
/ 12 января 2011

string.Format - очень рискованный метод. Есть много вещей, которые могут пойти не так, без ошибок компиляции:

string.Format("{0{", text);
string.Format("{1}", text);
string.Format("(0)", text);
string.Format("{0}", text1, text2);

Я ищу способ найти эту проблему во время компиляции. Если я правильно помню, Решарпер нашел некоторые из этих ошибок, но они слишком богаты для моей крови.

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Resharper сделает это за вас - даже во время редактирования: -).

Однако учтите, что такие вещи, как

String.Format("{0} blabla", foo, bar);

Не генерируют ошибку(в конце концов, решение спрятать значение совершенно нормально).

1 голос
/ 20 января 2011

Проверка формата строки для .NET2.0

После некоторых исследований я обнаружил, что FxCop уже содержит правило для проверки формата строки (Usage Rules\Provide correct arguments to formatting methods).Это даже идентифицирует пример в ответе @Sklivvz.К сожалению:

  1. Правило существует только в старой версии 1.35 , но не в 1.36 (см .: Прерванные правила FxCop в V1.36 ).
  2. Существующие в коде лямбда-выражения не выдают никаких ошибок правил или сообщений об исключениях. Он просто останавливает проверку, не сообщая .Я предполагаю, что это потому, что V1.35 использует .NET runtime 2.0.
  3. Правило охватывает только вызовы для Console.Write, Console.WriteLine, string.Format & StringBuilder.AppendFormat. Мне удалось настроить его (используя Reflector), чтобы также охватить Common.Logging.ILog.DebugFormat, но я почти уверен, что это противоречит MS EULA ( ". Вы не можете перепроектировать, декомпилировать или разбирать ... ").

Таким образом, вы можете безопасно использовать FxCop для тестирования форматирования строк в ваших приложениях .NET2.0.


Но как насчет новых версий .NET?

Для всех, кто работает с более современными версиями, я написал правило StyleCop , которое проверяет строковые литералы для commonшаблоны ошибок формата .Он далек от совершенства и дает много ложных срабатываний, но все еще покрывает много.

Я хотел бы проверить новый FxCop SDK для более комплексного решения.

Я опубликую свои выводы здесь.

0 голосов
/ 19 января 2011

Resharper поможет вам идентифицировать его, но он очень тяжелый и должен использоваться с осторожностью, если вы работаете над существующим приложением.

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