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