Подавление предупреждения анализа статического кода CA1806 для вызовов TryParse - PullRequest
7 голосов
/ 06 января 2011

Мне было интересно, что думают люди о CA1806 (DoNotIgnoreMethodResults) Предупреждение статического анализа кода при использовании FxCop.

У меня есть несколько случаев, когда я использую Int32.TryParse для извлечения внутренней информации о конфигурации, которая была сохранена в файле. Я получаю много кода, который выглядит следующим образом:

Int32.TryParse(someString, NumberStyles.Integer, CultureInfo.InvariantCulture, out intResult);

MSDN говорит, что по умолчанию intResult равен нулю, если что-то не получается, и это именно то, что я хочу.

К сожалению, этот код вызовет CA1806 при выполнении статического анализа кода. Похоже, много избыточного / бесполезного кода для исправления ошибок примерно так:

bool success = Int32.TryParse(someString, NumberStyles.Integer, CultureInfo.InvariantCulture, out intResult);
if (!success)
{
 intResult= 0;
}

Должен ли я подавить это сообщение или откусить пулю и добавить всю эту избыточную проверку ошибок? Или, может быть, у кого-то есть лучшая идея для такого случая?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 06 января 2011

Почему бы не преобразовать ваши TryParse s в одну функцию с нужным вам поведением?:

static int ParseOrDefault(string someStr)
{
    int result = 0;
    if(int.TryParse(someStr, out result))
    {
        return result;
    }
    return 0;
}

Таким образом, вы избегаете назойливого предупреждения и отбрасываете лишний код. Отдельная функция делает ваши ожидания явными и не оставляет места для путаницы.

3 голосов
/ 06 января 2011

Укуси пулю или хотя бы добавь комментарии. Как кодер Johnny the Homicidal знает, что Int32.TryParse будет выдавать 0, не обращаясь к внешней документации? Точно так же, как он узнает, что 0 - это то, что вы хотите по умолчанию? Более поздняя реализация специфична для своей цели, поэтому я должен согласиться с FxCop здесь.

Помни, Джонни знает, где ты живешь.

С учетом вышесказанного, я ЧАСТО подавляю стилевого полицейского (в основном потому, что я использую асинхронную CTP, которая еще не играет вместе) Руководящие принципы стиля - только это, руководящие принципы. Используйте свою голову, но всегда ошибка на стороне ясности, если преформ не является проблемой.

Имейте в виду, что подобное поведение может измениться в будущем, всегда ли вы хотите, чтобы значение 0 было значением по умолчанию? Может ли это измениться? Даже если вы выполните рефакторинг в вспомогательный метод ParseOrDefault, вам, вероятно, следует учитывать разумное изменение значений по умолчанию в течение срока службы продукта.

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

Подавить прочь!

FxCop / Code Anaylysis - это только настоящие рекомендации. Это может помочь улучшить части вашего кода, особенно если он распространяется для использования другими разработчиками, но в конце концов это всего лишь руководство, и вы можете писать код по своему усмотрению.

...