CA1806: Ne hagyja figyelmen kívül a metódus eredményeit
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1806 |
Cím | Ne hagyja figyelmen kívül a metódus eredményeit |
Kategória | Teljesítmény |
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
A figyelmeztetésnek több oka is lehet:
A rendszer létrehoz egy új objektumot, de soha nem használja.
A rendszer meghív egy új sztringet létrehozó és visszaadó metódust, és soha nem használja az új sztringet.
COM vagy P/Invoke metódus, amely soha
HRESULT
nem használt vagy nem használt hibakódot ad vissza.Nyelvvel integrált lekérdezési (LINQ) metódus, amely soha nem használt eredményt ad vissza.
Szabály leírása
A szükségtelen objektumlétrehozás és a nem használt objektum kapcsolódó szemétgyűjtése rontja a teljesítményt.
A sztringek nem módosíthatók, és az olyan metódusok, mint String.ToUpper például egy sztring új példányának visszaadása ahelyett, hogy módosítanák a sztring példányát a hívó metódusban.
Ha figyelmen kívül hagy egy HRESULT
hibakódot, az alacsony erőforrás-feltételekhez vagy a hibafeltételek váratlan viselkedéséhez vezethet.
A LINQ-módszerekről ismert, hogy nincsenek mellékhatásai, és az eredményt nem szabad figyelmen kívül hagyni.
Szabálysértések kijavítása
Ha egy metódus egy soha nem használt objektum új példányát hozza létre, adja át a példányt argumentumként egy másik metódusnak, vagy rendelje hozzá a példányt egy változóhoz. Ha az objektum létrehozása szükségtelen, távolítsa el.
-vagy-
Ha az A metódus meghívja a B metódust, de nem használja a B metódus által visszaadott új sztringpéldányt, adja át a példányt argumentumként egy másik metódusnak, vagy rendelje hozzá a példányt egy változóhoz. Vagy távolítsa el a hívást, ha szükségtelen.
-vagy-
Ha az A metódus meghívja a B metódust, de nem használja a HRESULT
metódus által visszaadott hibakódot, használja az eredményt egy feltételes utasításban, rendelje hozzá az eredményt egy változóhoz, vagy adja át argumentumként egy másik metódusnak.
-vagy-
Ha az A LINQ metódus meghívja a B metódust, de nem használja az eredményt, használja az eredményt egy feltételes utasításban, rendelje hozzá az eredményt egy változóhoz, vagy adja át argumentumként egy másik metódusnak.
Mikor kell letiltani a figyelmeztetéseket?
Ne tiltsa el a szabály figyelmeztetését, kivéve, ha az objektum létrehozása valamilyen célt szolgál.
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 CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
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.CA1806.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.
További kényszerítési módszerek
Ezt a szabályt úgy konfigurálhatja, hogy ellenőrizze, hogy a rendszer további egyéni API-kból származó eredményeket használ-e. Adjon meg egy vagy több metódust a additional_use_results_methods
beállítás értékeként. Több metódusnév megadásához különítse el őket a |
. A metódusnév engedélyezett formátumai a következők:
- Csak metódusnév (amely tartalmazza az összes ilyen nevű metódust, függetlenül azok típusától vagy névterétől).
- Teljes név a dokumentáció azonosítója formátumban, opcionális
M:
előtaggal.
Ha például meg szeretné adni, hogy a CA1806 szabálynak egy elnevezett MyMethod1
metódusból származó eredményt is ellenőriznie kell, adja hozzá a következő kulcs-érték párot egy .editorconfig fájlhoz a projektben.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
Vagy a teljes névvel egyértelműsítse vagy ellenőrizze, hogy csak egy adott metódus szerepel-e a névben.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
1. példa
Az alábbi példa egy olyan osztályt mutat be, amely figyelmen kívül hagyja a hívás String.Trimeredményét.
public class Book
{
private readonly string? _Title;
public Book(string title)
{
if (title != null)
{
// Violates this rule
title.Trim();
}
_Title = title;
}
public string? Title
{
get { return _Title; }
}
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
' Violates this rule
title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
2. példa
Az alábbi példa kijavítja az 1 . példa megsértését úgy, hogy az eredmény String.Trim vissza lesz rendelve a meghívott változóhoz.
public class Book
{
private readonly string? _Title;
public Book(string title)
{
if (title != null)
{
title = title.Trim();
}
_Title = title;
}
public string? Title
{
get { return _Title; }
}
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
title = title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
3. példa
Az alábbi példa egy olyan metódust mutat be, amely nem az általa létrehozott objektumot használja.
Megjegyzés:
Ez a szabálysértés nem reprodukálható a Visual Basicben.
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
// Violates this rule
new Book();
return new Book();
}
}
4. példa
Az alábbi példa kijavítja a 3 . példa megsértését egy objektum szükségtelen létrehozásának eltávolításával.
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
return new Book();
}
}