Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Property | Value |
|---|---|
| Regel-ID | IDE0410 |
| Titel | Använda etiketterad jump-instruktion |
| Kategori | Style |
| Underkategori | Språkregler (kodblocksinställningar) |
| Tillämpliga språk | C# 15+ |
| Options | csharp_style_prefer_labeled_jump_statements |
Översikt
För ett tydligare och mer koncist kontrollflöde i kapslade loopar flaggar den här regeln kod som använder satser med goto eller booleska flaggor för att bryta sig ut ur eller fortsätta i kapslade loopar, när en märkt break- eller continue-sats (C# 15+) kan användas i stället.
Regeln identifierar följande mönster:
- En
goto-sats som hoppar till en etikett direkt efter en nästlad loop och som kan ersättas medbreak <label>. - En
gotoinstruktion som hoppar till en tom etikett i slutet av loopens brödtext (som effektivt fortsätter den yttre loopen), som kan ersättas medcontinue <label>. - Ett booleskt flaggmönster, där en flaggvariabel anges till
trueoch sedan kontrolleras på varje loopnivå för att sprida en bryt eller fortsätta utåt genom kapslade loopar, som kan ersättas med en enda etikettbreak <label>ellercontinue <label>.
Options
Alternativ anger det beteende som du vill att regeln ska framtvinga. Information om hur du konfigurerar alternativ finns i Alternativformat.
csharp_style_prefer_labeled_jump_statements
| Property | Value | Beskrivning |
|---|---|---|
| Alternativnamn | csharp_style_prefer_labeled_jump_statements | |
| Alternativvärden | true |
Föredrar etiketterade hoppinstruktioner |
false |
Avaktiverar regeln | |
| Standardalternativvärde | true |
Example
I följande exempel visas de tre mönster som den här regeln identifierar:
goto har ersatts av break-etikett
// 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 ersatt av fortsätt etikett
// 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;
}
}
Flaggmönster har ersatts av break-etikett
// 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;
}
}
}
Undertryck en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan regeln.
#pragma warning disable IDE0410
// The code that's violating the rule is on this line.
#pragma warning restore IDE0410
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.cs]
dotnet_diagnostic.IDE0410.severity = none
Om du vill inaktivera alla regler i kodformat anger du allvarlighetsgraden för kategorin Style till none i konfigurationsfilen.
[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.