Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
| Недвижимость | Ценность |
|---|---|
| Идентификатор правила | IDE0410 |
| Заголовок | Использование инструкции перехода с метками |
| Категория | Style |
| Подкатегории | Языковые правила (настройки блока кода) |
| Применимые языки | C# 15+ |
| Параметры | csharp_style_prefer_labeled_jump_statements |
Обзор
Для более ясного и лаконичного управления потоком выполнения во вложенных циклах это правило помечает код, в котором используются инструкции goto или шаблоны с логическими флагами для выхода из вложенных циклов или перехода к следующей итерации, когда вместо этого можно использовать инструкцию break или continue с меткой (C# 15+).
Правило обнаруживает следующие шаблоны:
- Оператор
goto, который переходит к метке, расположенной сразу после вложенного цикла, можно заменить наbreak <label>. - Оператор
goto, который переходит к пустой метке в конце тела цикла (фактически продолжая внешний цикл), можно заменить наcontinue <label>. - Паттерн с логическим флагом, при котором переменной-флагу присваивается значение
true, а затем она проверяется на каждом уровне цикла, чтобы передать break или continue на внешний уровень через вложенные циклы; его можно заменить одним помеченнымbreak <label>илиcontinue <label>.
Варианты
Параметры указывают поведение, которое вы хотите, чтобы правило применяло. Сведения о настройке параметров см. в разделе "Формат параметров".
csharp_style_prefer_помеченные_операторы_перехода
| Недвижимость | Ценность | Описание |
|---|---|---|
| Имя параметра | Стиль C#: предпочитать операторы перехода с метками | |
| Значения параметра | true |
Предпочитайте операторы перехода с метками |
false |
Отключает правило | |
| Значение параметра по умолчанию | true |
Example
В следующих примерах показаны три шаблона, обнаруженные этим правилом:
Goto заменен меткой останова
// Code with violations.
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
if (x * y > 20)
goto found;
}
}
found:
Console.WriteLine("Done");
// Fixed code.
found: for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
if (x * y > 20)
break found;
}
}
Console.WriteLine("Done");
goto заменён меткой continue
// Code with violations.
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
goto next;
}
next: ; // The empty statement is required; a label in C# must be followed by a statement.
}
// Fixed code.
next: for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
continue next;
}
}
Шаблон флага, замененный меткой останова
// Code with violations.
bool found = false;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i * j > 20)
{
found = true;
break;
}
}
if (found)
break;
}
// Fixed code.
loop_i: for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i * j > 20)
{
break loop_i;
}
}
}
Отключение предупреждений
Если вы хотите отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable IDE0410
// The code that's violating the rule is on this line.
#pragma warning restore IDE0410
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.cs]
dotnet_diagnostic.IDE0410.severity = none
Чтобы отключить все правила стиля кода, задайте уровень серьезности для категории Stylenone в файле конфигурации.
[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".