Анализ кода возвращается с предложением не использовать "out" параметры - PullRequest
5 голосов
/ 10 сентября 2009

Я запустил инструмент анализа кода VS 2008 для созданного мной объекта и получил следующее предложение ...

Предупреждение 147 CA1021: Microsoft.Design : Рассмотрите дизайн, который не требовать, чтобы returnValue был out параметр.

Я нахожу «полезные» параметры весьма полезными и не осознавал, что они считаются недовольными практикой проектирования. Я хотел знать, может ли кто-то пролить свет на причину, по которой я получил это Предупреждение? Если это плохая практика? Зачем? и что было бы хорошей практикой?

Я ценю любой совет.

Ответы [ 4 ]

10 голосов
/ 10 сентября 2009

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

В любом случае, вот документация , которая объясняет это конкретное предупреждение .

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

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

4 голосов
/ 10 сентября 2009

Я однажды провел анализ кода своего проекта. Также я получил много проницательных предложений, я очень кратко отключил это. Многие из предложений носят религиозный характер, вы можете сделать это так или иначе, вопрос стиля и не плохая практика.

В вашей ситуации. Если у вас есть только один возвращаемый параметр, верните его обратно из функции.

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

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

3 голосов
/ 10 сентября 2009

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

Если они не соответствуют тому, что вы пишете, отключите правила анализа кода, которые вам не подходят. Лично я склонен отключать правила именования, переносимости и совместимости, поскольку они не относятся к типу кода, который я пишу.

2 голосов
/ 10 сентября 2009

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

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

...