CA2201: Ne emeljen fenntartott kivételtípusokat

Tulajdonság Érték
Szabályazonosító CA2201
Cím Ne emelje ki a fenntartott kivételtípusokat
Kategória Használat
A javítás romboló vagy nem romboló Szünetelés
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

Egy metódus olyan kivételtípust hoz létre, amely túl általános vagy a futtatókörnyezet által fenntartott.

Szabály leírása

A következő kivételtípusok túl általánosak ahhoz, hogy elegendő információt adjanak a felhasználónak:

A következő kivételtípusok vannak fenntartva, és csak a közös nyelvi futtatókörnyezet dobhatja őket:

Ne dobjon ki általános kivételeket

Ha egy általános kivételtípust(például ExceptionSystemExceptionegy könyvtárban vagy keretrendszerben) ad meg, az arra kényszeríti a felhasználókat, hogy minden kivételt elfogjanak, beleértve az ismeretlen kivételeket is, amelyeket nem tudnak kezelni.

Ehelyett vagy dobjon el egy már meglévő származtatottabb típust a keretrendszerben, vagy hozzon létre egy saját típust, amely a Exception típusból származik.

Adott kivételek kizárása

Az alábbi táblázat azt mutatja be, hogy milyen kivételt kell kivenni a különböző típusú érvénytelen argumentumok esetében, beleértve a tulajdonság tartozékában lévő set értékparamétert is.

Érvénytelen argumentum Kivétel
null hivatkozás ArgumentNullException
Az engedélyezett értéktartományon kívül (például gyűjtemény vagy lista indexe) ArgumentOutOfRangeException
Érvénytelen enum érték InvalidEnumArgumentException
Olyan formátumot tartalmaz, amely nem felel meg egy metódus paraméter-specifikációinak (például a formátum sztringjének ToString(String)) FormatException
Egyéb esetben érvénytelen ArgumentException

Az alábbi táblázat azt mutatja be, hogy a különböző típusú érvénytelen műveletek esetében melyik kivételt kell kivenni.

Érvénytelen művelet Kivétel
A művelet érvénytelen az objektum aktuális állapotához. InvalidOperationException
A művelet egy megsemmisített objektumon történik. ObjectDisposedException
A művelet nem támogatott (például egy olvasásra megnyitott stream felülírása Stream.Write esetén). NotSupportedException
Az átalakítás túlcsordulást eredményezne (például egy kifejezett típusátalakító operátor túlterhelése esetén). OverflowException

Minden más helyzetben érdemes lehet létrehoznia egy olyan saját típust, amely a Exception-ből származik, és dobja azt.

Szabálysértések kijavítása

A szabály megsértésének kijavításához módosítsa a kidobott kivétel típusát egy olyan típusra, amely nem a fenntartott típusok egyike.

Example

// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...

// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...

// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }

// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();

Mikor kell letiltani a figyelmeztetéseket?

Ne nyomja el a figyelmeztetést ebből a szabályból.