Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA1819 |
| Cím | A tulajdonságok nem térítenek vissza tömböket |
| Kategória | Teljesítmény |
| A javítás romboló vagy nem romboló | Szünetelés |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
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 nincsenek írásvédettek, akkor sem, ha a tulajdonság csak olvasható. A tömb védelme érdekében a tulajdonságnak vissza kell adnia a tömb egy másolatá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.
Egyébként ne nyomja el ennek a szabálynak a 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 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.
Példa szabálysértés
Az alábbi példa egy olyan tulajdonságot mutat be, amely megsérti ezt a szabályt:
public class Book
{
public Book(string[] pages)
{
Pages = pages;
}
public string[] Pages { get; }
}
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, hogy az gyűjteményt adjon vissza
Az alábbi példa kijavítja a megsértést azáltal, hogy módosítja a tulajdonságot, hogy az egy System.Collections.ObjectModel.ReadOnlyCollection<T>-t adjon vissza.
public class Book
{
public Book(string[] pages)
{
Pages = new ReadOnlyCollection<string>(pages);
}
public ReadOnlyCollection<string> Pages { get; }
}
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
{
public Book(string[] pages)
{
Pages = pages;
}
public string[] Pages { get; set; }
}
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 a tulajdonságot úgy módosítja, hogy az egy System.Collections.ObjectModel.Collection<T>-t adjon vissza.
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
{
public Book(string[] pages)
{
Pages = new Collection<string>(pages);
}
public Collection<string> Pages { get; }
}