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


CA1002: Ne tegye közzé az általános listákat

Tulajdonság Érték
Szabályazonosító CA1002
Cím Általános listák nem tehetők elérhetővé
Kategória Tervez
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem

Ok

A típus egy külsőleg látható tagot tartalmaz, amely egy System.Collections.Generic.List<T> típus, egy típust List<T> ad vissza, vagy amelynek az aláírása tartalmaz egy paramétert List<T> .

Ez a szabály alapértelmezés szerint csak külsőleg látható típusokat tekint meg, de ez konfigurálható.

Szabály leírása

System.Collections.Generic.List<T> Egy általános gyűjtemény, amely teljesítményre és nem öröklésre lett tervezve. List<T> nem tartalmaz olyan virtuális tagokat, amelyek megkönnyítik az örökölt osztályok viselkedésének módosítását. A következő általános gyűjtemények öröklésre vannak tervezve, és ahelyett, hogy közzé kellene tenni őket List<T>.

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

A szabály megsértésének kijavításához módosítsa a System.Collections.Generic.List<T> típust az öröklésre tervezett általános gyűjtemények egyikére.

Example

// This class violates the rule.
public class MutableItems
{
    // CA1002: Change 'List<string>' in 'MutableItems.Items' to
    // use 'Collection<T>', 'ReadOnlyCollection<T>' or 'KeyedCollection<K,V>'.
    public List<string> Items { get; } = [];

    public void Add(string item)
    {
        Items.Add(item);
    }
}

// This class satisfies the rule.
public class ReadOnlyItems
{
    private readonly List<string> _items = [];

    public IReadOnlyCollection<string> Items => _items.AsReadOnly();

    public void Add(string item)
    {
        _items.Add(item);
    }
}

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa le a szabály figyelmeztetését, hacsak a figyelmeztetést indító szerelvény nem újrafelhasználható kódtárnak minősül. Ezt a figyelmeztetést például nyugodtan el lehet tiltani egy teljesítményalapú alkalmazásban, ahol az általános listák használatából származó teljesítménybeli előny származik.

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 CA1002
// The code that's violating the rule is on this line.
#pragma warning restore CA1002

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.CA1002.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 api_surface beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa 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

Jegyzet

Cserélje le a XXXXCAXXXX részét a vonatkozó szabály azonosítójára.

CA1005: Az általános típusok túlzott paramétereinek elkerülése

CA1010: A gyűjteményeknek általános felületet kell implementálniuk

CA1000: Ne deklarálja a statikus tagokat általános típusok esetében

CA1003: Általános eseménykezelő példányok használata

Lásd még

Generikus