CA1512: Använd hjälpen för ArgumentOutOfRangeException-kast
Property | Värde |
---|---|
Regel-ID | CA1512 |
Title | Använda hjälpen för ArgumentOutOfRangeException-kast |
Kategori | Underhåll |
Korrigeringen är icke-bakåtkompatibel | Icke-breaking |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Koden kontrollerar om ett argument är mindre än eller större än ett angivet värde och sedan villkorligt genererar en ArgumentOutOfRangeException.
Regelbeskrivning
Argumentkontroller har en betydande inverkan på kodstorleken och dominerar ofta koden för små funktioner och egenskapsuppsättningar. Dessa kontroller förhindrar inlining och orsakar betydande förorening av instruktionscache. Throw-helper-metoder som ArgumentOutOfRangeException.ThrowIfGreaterThan är enklare och effektivare än if
block som konstruerar en ny undantagsinstans.
Exempel
Följande kodfragment visar överträdelser av CA1512:
void M(int arg)
{
if (arg is 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg < 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg <= 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg <= 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg < 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg > 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg >= 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg == 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg != 42)
throw new ArgumentOutOfRangeException(nameof(arg));
}
Följande kodfragment visar korrigeringarna:
void M(int arg)
{
ArgumentOutOfRangeException.ThrowIfZero(arg);
ArgumentOutOfRangeException.ThrowIfNegative(arg);
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(arg);
ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfLessThan(arg, 42);
ArgumentOutOfRangeException.ThrowIfGreaterThan(arg, 42);
ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfNotEqual(arg, 42);
}
Så här åtgärdar du överträdelser
Ersätt blocket if
som utlöser undantaget med ett anrop till någon av följande throw-helper-metoder:
- ArgumentOutOfRangeException.ThrowIfZero<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfNegative<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfNegativeOrZero<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfLessThanOrEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfLessThan<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfGreaterThan<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfNotEqual<T>(T, T, String)
I Visual Studio kan du också använda glödlampans meny för att korrigera koden automatiskt.
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. Det är också bra att förhindra överträdelser som identifieras som falska positiva identifieringar.
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 CA1512
// The code that's violating the rule is on this line.
#pragma warning restore CA1512
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.CA1512.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.