Есть ли смысл использовать оператор отбрасывания C # для возвращаемых значений метода? - PullRequest
3 голосов
/ 04 мая 2019

Итак, анализ кода и предложения кода Visual Studio 2019 начали выделять каждую строку кода, где я вызываю метод, который возвращает значение, но я его вообще не использую, и советует мне использовать оператор discard _.

Я не совсем понимаю, почему это важно, и даже кажется неправильным для кода стиля Fluent API.

Есть ли функциональная разница между двумя следующими строками?

private int SomeMethod() => 0;
...
SomeMethod();
_ = SomeMethod();
...
* 1008Будет ли иметь значение больше, если возвращаемое значение является ссылкойЕсли нет, есть ли способ глобально отключить эту проверку?

1 Ответ

6 голосов
/ 04 мая 2019

Выдержка из Документация Microsoft :

Начиная с C # 7.0, C # поддерживает сбросы, которые являются временными, фиктивными переменные, которые намеренно не используются в коде приложения. Выбрасывает эквивалентны неназначенным переменным; они не имеют значения. Потому что есть только одна переменная сброса, и эта переменная может даже если выделено хранилище, сбросы могут уменьшить выделение памяти . Поскольку они проясняют цель вашего кода, они улучшают его удобочитаемость и ремонтопригодность.

Весь анализ кода сделан, чтобы помочь улучшить общее кодирование. Иногда мы пишем быстрые методы в начале проекта, который возвращает простое значение. Во время рефакторинга мы прекращаем использовать такую ​​переменную по любой причине. Анализ кода просто указывает на это. Как вы, разработчик, должны сказать: «Эй, позвольте мне изменить метод, чтобы НЕ возвращать переменные, потому что нам это не нужно». В вашей команде все зависит от стиля разработки.

Проверьте вашу проблему, у меня был VS2019 16.0.0 Preview 5.0, и проблема была.

После комментария, сделанного @MartinUllrich, я обновился до версии 16.1.0 Preview 2.0. Предупреждение исчезает. Вы также можете отключить предупреждение , используя директиву #pragma

Sample with pragma directive

Вы также отключаете предупреждение в верхней части исходного файла: enter image description here

Вы также подавляете предупреждения для всего проекта .

suppress for project

...