CA2208: Argumentum-kivételek helyes példányosítása
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2208 |
Cím | Argumentum-kivételek helyes példányosítása |
Kategória | Használat |
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 | Javaslatként |
Ok
Ha egy metódus paraméterrel rendelkezik, és olyan kivételtípust ad ki, amelyből származik vagy származik, ArgumentExceptionakkor egy konstruktornak megfelelően kell meghívnia egy paramétert elfogadó konstruktort paramName
. A lehetséges okok közé tartoznak a következő helyzetek:
- Egy olyan kivételtípus alapértelmezett (paraméter nélküli) konstruktorának hívása történik, amely egy paramétert elfogadó
paramName
konstruktorsal is rendelkezik. ArgumentException - A rendszer helytelen sztringargumentumot ad át egy olyan kivételtípus paraméteres konstruktorának, amely vagy amelyből származik. ArgumentException
- A paraméter egyik neve a
message
kivételtípus konstruktorának argumentuma, amely a következőből származik vagy származik: ArgumentException.
Szabály leírása
Az alapértelmezett konstruktor meghívása helyett hívja meg az egyik konstruktor túlterhelését, amely lehetővé teszi, hogy értelmesebb kivételüzenetet adjon meg. A kivételüzenetnek a fejlesztőre kell irányulnia, és egyértelműen meg kell magyaráznia a hibafeltételt, valamint a kivétel kijavításának vagy elkerülésének módját.
Az egy és két sztring konstruktorának ArgumentException és származtatott típusainak aláírásai nem összhangban vannak a pozícióval message
és paramName
a paraméterekkel. Győződjön meg arról, hogy ezek a konstruktorok a megfelelő sztringargumentumokkal vannak meghívva. Az aláírások a következők:
ArgumentException(string message)
ArgumentException(string message, string paramName)
ArgumentNullException(string paramName)
ArgumentNullException(string paramName, string message)
ArgumentOutOfRangeException(string paramName)
ArgumentOutOfRangeException(string paramName, string message)
DuplicateWaitObjectException(string parameterName)
DuplicateWaitObjectException(string parameterName, string message)
Szabálysértések kijavítása
A szabály megsértésének kijavításához hívjon meg egy olyan konstruktort, amely üzenetet, paraméternevet vagy mindkettőt használ, és győződjön meg arról, hogy az argumentumok megfelelőek a meghívott típushoz ArgumentException .
Tipp.
A Visual Studióban kódjavítás érhető el a helytelenül elhelyezett paraméternevekhez. A használatához helyezze a kurzort a figyelmeztető sorra, és nyomja le a Ctrl+ billentyűt. (pont). Válassza az argumentumok sorrendjének felcserélése lehetőséget a megjelenő lehetőségek listájából.
Ha üzenet helyett paraméternevet ad át a ArgumentException(String) metódusnak, a javító lehetővé teszi, hogy inkább a két argumentumos konstruktorra váltson.
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetését csak akkor lehet letiltani, ha egy paraméteres konstruktort a megfelelő sztringargumentumokkal hív meg.
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 CA2208
// The code that's violating the rule is on this line.
#pragma warning restore CA2208
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.CA2208.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezt a beállítást konfigurálhatja csak ehhez a szabályhoz, az összes szabályhoz, vagy az ebben a kategóriában (Tervezés) szereplő összes szabályhoz, amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott API-felületek belefoglalása
A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Alapértelmezés szerint a CA2208 szabály minden API-felületre (nyilvános, belső és privát) érvényes.
Példa
Az alábbi kód egy konstruktort mutat be, amely helytelenül példányosítja a példányt ArgumentNullException.
public class Book
{
public Book(string title)
{
Title = title ??
throw new ArgumentNullException("All books must have a title.", nameof(title));
}
public string Title { get; }
}
Public Class Book
Private ReadOnly _Title As String
Public Sub New(ByVal title As String)
' Violates this rule (constructor arguments are switched)
If (title Is Nothing) Then
Throw New ArgumentNullException("title cannot be a null reference (Nothing in Visual Basic)", "title")
End If
_Title = title
End Sub
Public ReadOnly Property Title()
Get
Return _Title
End Get
End Property
End Class
Az alábbi kód a konstruktor argumentumainak átváltásával kijavítja az előző szabálysértést.
public class Book
{
public Book(string title)
{
Title = title ??
throw new ArgumentNullException(nameof(title), "All books must have a title.");
}
public string Title { get; }
}
Public Class Book
Private ReadOnly _Title As String
Public Sub New(ByVal title As String)
If (title Is Nothing) Then
Throw New ArgumentNullException("title", "title cannot be a null reference (Nothing in Visual Basic)")
End If
_Title = title
End Sub
Public ReadOnly Property Title()
Get
Return _Title
End Get
End Property
End Class
Kapcsolódó szabályok
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: