Стандартной пустой операцией оператор / noop в C # является ;
, как в if (true) ;
.
- черничные поля
Но с использованием этого стандартного ;
в качестве ветви оператора if
заставляет MS Visual Studio 2010 отображать предупреждение: «Возможно, ошибочное пустое выражение». (Предупреждение CS0642, хотя VS2010 не сообщает мне об этом или не ссылается на фактическую справку для предупреждения.)
Хуже того, Спецификация языка MSDN C # не упоминает, что фактически кодирует , что этот пустой оператор как ветвь оператора if
вызывает предупреждение CS0642 "Возможная ошибочная пустая инструкция". (Предупреждение, потому что это «плохая форма», потенциально неоднозначная.)
Хуже того, похоже, что VS2010 не дает возможности аккуратно подавить отдельное предупреждение. Я должен был бы вставить #pragma warning disable CS0642
перед строкой (ами) и [опционально] #pragma warning disable CS0642
после. Для меня это страшнее, чем предупреждение. Я бы лучше использовал { }
вместо ;
. (Я мог бы использовать переопределение, которое немного менее уродливо.)
Я искал здесь "C # no-op", потому что я хотел альтернативу "пустому выражению", чтобы избавиться от этого предупреждения. Мне не нужен контрольно-пропускной пункт. Я просто хочу сделать [абсолютно] ничего, что не является двусмысленным, как «пустое утверждение».
Альтернатива не должна вызывать НЕКОТОРОЕ ДРУГОЕ предупреждение. int u;
не годится, потому что вызывает предупреждение «Переменная 'u' объявлена, но никогда не используется". int u = 0;
не годится, потому что вызывает предупреждение «Переменная 'u' назначена, но ее значение никогда не используется".
Если бы noop;
(или подобное) было добавлено как однозначное пустое утверждение (НЕ определение макроса), это было бы здорово.
Если бы noop();
(или подобное) была функцией с пустым телом (которое может полностью исчезнуть, когда компилятор вставит его в строку), это было бы почти замечательно.
Когда ветвь является только одним оператором, я часто опускаю окружающие {
и }
ЛИНИИ, потому что они не нужны, и они растягивают код по вертикали, затрудняя его чтение. Несоответствие в языке состоит в том, что я не могу опустить окружающие {
и }
ЛИНИИ, когда они окружают НУЛЕВЫЕ операторы. Я могу сжать две строки до { }
на одной линии, но это противоречиво. Я думаю, что ;
на линии - самое лучшее решение, и оно НЕ должно вызывать предупреждение на [неустановленных] основаниях "плохой формы". Я думаю, что предупреждение CS0642 должно было по умолчанию выключено. Я думаю, что следующий код должен быть приемлемым как есть:
if (condition1)
action1;
else if (condition2)
; // (do nothing)
else if (condition3)
action3;
else if (condition4)
; // (do nothing)
else if (condition5)
action5;
else
action99;
(Я пожаловался, что не смог написать это как комментарий, потому что у меня еще не было «50 репутаций, чтобы комментировать». Теперь, когда я могу комментировать, на 2K байтах, это слишком долго для комментария на 1.5K байтов, поэтому он остается здесь.)