Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1819 |
| Başlık | Özellikler diziler döndürmemelidir |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Son Dakika |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Bir özellik bir dizi döndürür.
Varsayılan olarak, bu kural yalnızca dışarıdan görünen özelliklere ve türlere bakar, ancak bu yapılandırılabilir.
Kural açıklaması
Özellikler tarafından döndürülen diziler, özellik salt okunur olsa bile yazma korumalı değildir. Diziyi yetkisiz erişime karşı korumalı tutmak için, özellik dizinin bir kopyasını döndürmelidir. Genellikle, kullanıcılar böyle bir özelliği çağırmanın olumsuz performans etkilerini anlamayacaktır. Bir özelliği özellikle dizinli özellik olarak kullanabilirler.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için özelliğini bir yöntem yapın veya özelliğini bir koleksiyon döndürecek şekilde değiştirin.
Uyarıların ne zaman bastırılması gerekiyor?
sınıfından türetilen bir özelliğin özniteliği için tetiklenen bir uyarıyı gizleyebilirsiniz. Öznitelikler dizi döndüren özellikler içerebilir, ancak koleksiyon döndüren özellikler içeremez.
Özellik bir Veri Aktarım Nesnesi (DTO) sınıfının parçasıysa uyarıyı gizleyebilirsiniz.
Aksi takdirde, bu kurala ait bir uyarıyı gizlemeyin.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1819
// The code that's violating the rule is on this line.
#pragma warning restore CA1819
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1819.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural için, geçerli olduğu tüm kurallar için veya bu kategorideki (Performans) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli API yüzeylerini ekleme
api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.
Örnek ihlal
Aşağıdaki örnekte bu kuralı ihlal eden bir özellik gösterilmektedir:
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
Bu kuralın ihlalini düzeltmek için özelliğini bir yöntem yapın veya özelliğini dizi yerine koleksiyon döndürecek şekilde değiştirin.
özelliğini bir yöntemle değiştirme
Aşağıdaki örnek, özelliğini bir yönteme değiştirerek ihlali düzeltir:
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();
}
}
Bir koleksiyon döndürmek için özelliğini değiştirme
Aşağıdaki örnek, özelliği bir System.Collections.ObjectModel.ReadOnlyCollection<T> döndürecek şekilde değiştirerek hatayı düzeltir.
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
Kullanıcıların bir özelliği değiştirmesine izin verme
Sınıfın tüketicisinin bir özelliği değiştirmesine izin vermek isteyebilirsiniz. Aşağıdaki örnekte bu kuralı ihlal eden bir okuma/yazma özelliği gösterilmektedir:
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
Aşağıdaki örnek, özelliği bir System.Collections.ObjectModel.Collection<T> döndürecek şekilde değiştirerek ihlali düzeltir.
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; }
}