Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA1065 |
| Cím | Ne emeljen kivételeket váratlan helyeken |
| Kategória | Tervezés |
| A javítás romboló vagy nem romboló | Nem törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
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
- Finalizálók
- Megsemmisítési módszerek
- Egyenlőségi operátorok
- Implicit kényszerítési operátor
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 amennyire lehet, úgy kell működniük, mint egy mező. A mezők nem okoznak kivételeket, és a tulajdonságoknak sem szabadna. 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:
- System.InvalidOperationException és az összes származék (beleértve a System.ObjectDisposedException)
- System.NotSupportedException és az összes származék
- System.ArgumentException (csak indexelt lekérdezés)
- System.Collections.Generic.KeyNotFoundException (csak indexelt lekérdezésbő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:
- System.InvalidOperationException és az összes származék (beleértve a System.ObjectDisposedException)
- System.NotSupportedException és az összes származék
- System.ArgumentException és származékok
Egyenlő metódusok
A következő Equals metódusok nem dobhatnak kivételeket:
Egy Equals metódusnak true-t vagy false-t kellene visszaadnia ahelyett, hogy kivételt eredményezne. Ha például Equals két nem egyező típust ad át, akkor csak vissza kell térnie false ahelyett, hogy egy ArgumentException dobna.
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, kiválthatnak egy ArgumentException-t. 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 konstruktorból történő kivételdobás miatt a típus nem használható az aktuális alkalmazási doménben. Egy statikus konstruktor kivételének oka (például biztonsági probléma) kell, hogy legyen.
Finalizáló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 véglegesítőben.
Megsemmisítési módszerek
A System.IDisposable.Dispose metódusok nem hozhatnak kivételt. A(z) Dispose-t gyakran hívják meg egy finally záradék takarítási logikájának részeként. Ezért a Dispose elemből történő kivételdobás hatására a felhasználónak a finally záradékon belül kell kivételkezelést hozzáadnia.
A Dispose(false) kódútvonalnak soha nem szabad kivételeket okoznia, mert a Dispose szinte mindig egy finalizálótól van meghívva.
Egyenlőségi operátorok (==, !=)
A módszerekhez hasonlóan Equals az egyenlőségi operátoroknak is vissza kell térniük true vagy false, és nem szabad kivételt dobniuk.
Implicit kényszerítési operátor
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.