Not
Å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.
CA1507: Använd
| Property | Värde |
|---|---|
| Regel-ID | CA1507 |
| Title | Använd nameof i stället för sträng |
| Kategori | Underhåll |
| Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
| Aktiverad som standard i .NET 10 | Som förslag |
Orsak
En string literal eller konstant som matchar namnet på en parameter för den innehållande metoden eller namnet på en egenskap av den innehållande typen används som ett argument till en metod.
Regelbeskrivning
Regel CA1507 flaggar användningen av en string literal som ett argument till en metod eller konstruktor där ett namn (NameOf i Visual Basic)-uttryck skulle öka underhållsbarheten. Regeln utlöses om alla följande villkor uppfylls:
Argumentet är en
stringliteral eller konstant.Argumentet motsvarar en
string-typed-parameter för metoden eller konstruktorn som anropas (det vill säga att det inte finns någon konvertering på anropsplatsen).Antingen:
Parameterns deklarerade namn är
paramNameoch det konstanta värdet för literalenstringmatchar namnet på en parameter för metoden, lambda eller den lokala funktion inom vilken metoden eller konstruktorn anropas.Parameterns deklarerade namn är
propertyNameoch det konstanta värdet för literalenstringmatchar namnet på en egenskap av den typ som metoden eller konstruktorn anropas inom.
Regel CA1507 förbättrar kodunderhållbarheten i fall där parametern kan byta namn i framtiden, men literalen string har av misstag inte bytt namn. Med hjälp av nameofbyter symbolen namn när parametern byts namn via en refaktoråtgärd. Dessutom fångas eventuella stavfel i parameterns namn av kompilatorn.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse ersätter du literalen string med ett nameof-uttryck (NameOf i Visual Basic). Följande två kodfragment visar till exempel ett brott mot regeln och hur du åtgärdar den:
public Book(string title)
{
// Violates rule CA1507
Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
// Resolves rule CA1507 violation
Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}
Dricks
En kodkorrigering är tillgänglig för den här regeln i Visual Studio. Om du vill använda den placerar du markören på literalen string och trycker på Ctrl+. (punkt). Välj Använd namn för att uttrycka symbolnamn i listan över alternativ som visas.
När du ska ignorera varningar
Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om kodens underhållbarhet.
Ignorera 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 aktiverar sedan regeln igen.
#pragma warning disable CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1507.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.