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


CA1819: A tulajdonságok nem adnak vissza tömböket

Tulajdonság Érték
Szabályazonosító CA1819
Cím A tulajdonságok nem adnak vissza tömböket
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A tulajdonság egy tömböt ad vissza.

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

Szabály leírása

A tulajdonságok által visszaadott tömbök írásvédettek, még akkor sem, ha a tulajdonság írásvédett. A tömb illetéktelen hozzáférésének megőrzéséhez a tulajdonságnak vissza kell adnia a tömb egy példányát. A felhasználók általában nem fogják megérteni az ilyen tulajdonság meghívásának kedvezőtlen teljesítménybeli következményeit. Pontosabban indexelt tulajdonságként használhatják a tulajdonságot.

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

A szabály megsértésének kijavításához állítsa a tulajdonságot metódussá, vagy módosítsa a tulajdonságot gyűjtemény visszaadásához.

Mikor kell letiltani a figyelmeztetéseket?

Letilthatja az osztályból Attribute származtatott attribútum tulajdonságára vonatkozó figyelmeztetést. Az attribútumok olyan tulajdonságokat tartalmazhatnak, amelyek tömböket adnak vissza, de nem tartalmazhatnak olyan tulajdonságokat, amelyek gyűjteményeket adnak vissza.

Letilthatja a figyelmeztetést, ha a tulajdonság egy adatátviteli objektum (DTO) osztály része.

Ellenkező esetben ne tiltsa le 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 CA1819
// The code that's violating the rule is on this line.
#pragma warning restore CA1819

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.CA1819.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 erre a szabályra, az összes szabályra, vagy az ebben a kategóriában (Teljesítmény) érvényes összes szabályra. 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

Példa megsértése

Az alábbi példa egy olyan tulajdonságot mutat be, amely megsérti ezt a szabályt:

public class Book
{
    private string[] _Pages;

    public Book(string[] pages)
    {
        _Pages = pages;
    }

    public string[] Pages
    {
        get { return _Pages; }
    }
}
Public Class Book
    Public Sub New(ByVal pages As String())
        Me.Pages = pages
    End Sub

    Public ReadOnly Property Pages() As String()
End Class

A szabály megsértésének kijavításához állítsa a tulajdonságot metódussá, vagy módosítsa a tulajdonságot úgy, hogy tömb helyett gyűjteményt adjon vissza.

A tulajdonság módosítása metódusra

Az alábbi példa a tulajdonság metódusra való módosításával oldja meg a szabálysértést:

Public Class Book

    Private _Pages As String()

    Public Sub New(ByVal pages As String())
        _Pages = pages
    End Sub

    Public Function GetPages() As String()
        ' Need to return a clone of the array so that consumers            
        ' of this library cannot change its contents            
        Return DirectCast(_Pages.Clone(), String())
    End Function

End Class
public class Book
{
    private string[] _Pages;

    public Book(string[] pages)
    {
        _Pages = pages;
    }

    public string[] GetPages()
    {
        // Need to return a clone of the array so that consumers            
        // of this library cannot change its contents            
        return (string[])_Pages.Clone();
    }
}

A tulajdonság módosítása gyűjtemény visszaadásához

Az alábbi példa kijavítja a szabálysértést azáltal, hogy módosítja a tulajdonságot egy System.Collections.ObjectModel.ReadOnlyCollection<T>:

public class Book
{
    private ReadOnlyCollection<string> _Pages;
    public Book(string[] pages)
    {
        _Pages = new ReadOnlyCollection<string>(pages);
    }

    public ReadOnlyCollection<string> Pages
    {
        get { return _Pages; }
    }
}
Public Class Book
    Public Sub New(ByVal pages As String())
        Me.Pages = New ReadOnlyCollection(Of String)(pages)
    End Sub

    Public ReadOnly Property Pages() As ReadOnlyCollection(Of String)

End Class

Tulajdonság módosításának engedélyezése a felhasználóknak

Előfordulhat, hogy engedélyezni szeretné az osztály fogyasztójának, hogy módosítson egy tulajdonságot. Az alábbi példa egy olvasási/írási tulajdonságot mutat be, amely megsérti ezt a szabályt:

public class Book
{
    private string[] _Pages;

    public Book(string[] pages)
    {
        _Pages = pages;
    }

    public string[] Pages
    {
        get { return _Pages; }
        set { _Pages = value; }
    }
}
Public Class Book
    Public Sub New(ByVal pages As String())
        Me.Pages = pages
    End Sub

    Public Property Pages() As String()

End Class

Az alábbi példa kijavítja a szabálysértést azáltal, hogy módosítja a tulajdonságot egy System.Collections.ObjectModel.Collection<T>:

Public Class Book
    Public Sub New(ByVal pages As String())
        Me.Pages = New Collection(Of String)(pages)
    End Sub

    Public ReadOnly Property Pages() As Collection(Of String)
End Class
public class Book
{
    private Collection<string> _Pages;

    public Book(string[] pages)
    {
        _Pages = new Collection<string>(pages);
    }

    public Collection<string> Pages
    {
        get { return _Pages; }
    }
}