Megosztás a következőn keresztül:


CA1065: Ne emeljen kivételeket váratlan helyeken

Tulajdonság Érték
Szabályazonosító CA1065
Cím Ne emeljen kivételeket váratlan helyeken
Kategória Design
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

Az a metódus, amely várhatóan nem ad kivételeket, kivételt eredményez.

Szabály leírása

Azok a metódusok, amelyektől nem várható kivétel, az alábbiak szerint kategorizálhatók:

  • Tulajdonság lekérési módszerei
  • Eseménykiegészítési módszerek
  • Egyenlő metódusok
  • GetHashCode metódusok
  • ToString metódusok
  • Statikus konstruktorok
  • Döntősök
  • Megsemmisítési módszerek
  • Egyenlőségi operátorok
  • Implicit öntött operátorok

A következő szakaszok ezeket a metódustípusokat ismertetik.

Tulajdonság lekérési módszerei

A tulajdonságok alapvetően intelligens mezők. Ezért a lehető legnagyobb mértékben úgy kell viselkedniük, mint egy mező. A mezők nem adnak kivételt, és a tulajdonságoknak sem kell. Ha olyan tulajdonsága van, amely kivételt jelez, fontolja meg módszerként.

A következő kivételeket lehet kivenni egy tulajdonság get metódusából:

Eseménykiegészítési módszerek

Az eseménykiegészítőknek olyan egyszerű műveleteknek kell lenniük, amelyek nem vetnek ki kivételeket. Eseménykezelő hozzáadásakor vagy eltávolításakor az esemény nem adhat kivételt.

Az alábbi kivételeket lehet kivenni egy eseménykiegészítőből:

Egyenlő metódusok

A következő Egyenlő metódusok nem szabad kivételeket kivenni:

Egy Equals metódusnak vissza kell térnie true , vagy false ahelyett, hogy kivételt kellene eredményeznie. Ha például Equals két nem egyező típust ad át, akkor csak vissza kell térnie false a dobás ArgumentExceptionhelyett.

GetHashCode metódusok

A következő GetHashCode metódusok általában nem szabad kivételeket okozni:

GetHashCode mindig egy értéket kell visszaadnia. Ellenkező esetben a kivonattáblában lévő elemek elveszhetnek.

Azok a GetHashCode verziók, amelyek argumentumot vesznek fel, egy ArgumentException. Azonban soha Object.GetHashCode nem szabad kivételt kivenni.

ToString metódusok

A hibakereső a sztringformátumú objektumok adatainak megjelenítését segíti System.Object.ToString . ToString Ezért ne módosítsa egy objektum állapotát, és ne dobja ki a kivételeket.

Statikus konstruktorok

A statikus konstruktor kivételeinek kivédése miatt a típus nem használható az aktuális alkalmazástartományban. Egy statikus konstruktor kivételének oka (például biztonsági probléma) kell, hogy legyen.

Döntősök

Ha kivételt ad egy véglegesítőből, a CLR gyorsan meghiúsul, ami megszakítja a folyamatot. Ezért ne dobjon kivételeket a döntőbe.

Megsemmisítési módszerek

A System.IDisposable.Dispose metódusok nem hozhatnak kivételt. Dispose gyakran nevezik egy záradék törlési logikájának finally részeként. Ezért explicit módon kivételt kell kivennie a felhasználótól Dispose , hogy kivételkezelést adjon hozzá a finally záradékon belül.

A Dispose(false) kód elérési útja soha nem vethet ki kivételeket, mert Dispose szinte mindig egy döntőstől hívjuk meg.

Egyenlőségi operátorok (==, !=)

A módszerekhez hasonlóan Equals az egyenlőségi operátoroknak is vissza kell térnie true vagy false, és nem szabad kivételeket kivenni.

Implicit öntött operátorok

Mivel a felhasználó gyakran nem tud arról, hogy implicit öntött operátort hívtak meg, az implicit öntött operátor által okozott kivétel váratlan. Ezért nem szabad kivételeket kivenni az implicit öntött operátorokból.

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

A tulajdonságbeolvasók esetében módosítsa a logikát úgy, hogy többé ne kelljen kivételt kivennie, vagy módosítsa a tulajdonságot metódussá.

A korábban felsorolt összes többi metódustípus esetében módosítsa a logikát, hogy többé ne kell kivételt kivennie.

Mikor kell letiltani a figyelmeztetéseket?

Ha a szabálysértést nem a kidobott kivétel, hanem egy kivétel deklarációja okozta, nyugodtan letilthatja a szabály figyelmeztetését.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA1065
// The code that's violating the rule is on this line.
#pragma warning restore CA1065

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA1065.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Lásd még