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


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();
    }
}