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.
CA2018:
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA2018 |
| Başlık |
count bağımsız değişkeni, Buffer.BlockCopy'ye kopyalanacak bayt sayısını belirtmelidir. |
| Kategori | Güvenilirlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Uyarı olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
Bu kural, elemanlarının boyutu bir bayttan büyük olan dizilerde count bağımsız değişkeni için Array.Length kullanıldığında Buffer.BlockCopy tetiklenir.
Kural açıklaması
Buffer.BlockCopy kullanılırken, count bağımsız değişkeni kopyalanacak bayt sayısını belirtir. Yalnızca öğeleri tam olarak bir bayt boyutunda olan dizilerde bağımsız değişken için Array.Length kullanmalısınızcount.
byte, sbyteve bool dizileri tek bayt boyutunda öğelere sahiptir.
İhlalleri düzeltme
Argüman için count kopyalamak istediğiniz bayt sayısını belirtiniz.
Örnek
İhlal:
using System;
class Program
{
static void Main()
{
int[] src = new int[] {1, 2, 3, 4};
int[] dst = new int[] {0, 0, 0, 0};
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
}
}
Düzeltme:
Dizinizin öğelerinin boyutu bir bayttan büyükse, bayt sayısını almak için dizinin uzunluğunu öğe boyutuyla çarpabilirsiniz.
using System;
class Program
{
static void Main()
{
int[] src = new int[] {1, 2, 3, 4};
int[] dst = new int[] {0, 0, 0, 0};
Buffer.BlockCopy(src, 0, dst, 0, src.Length * sizeof(int));
}
}
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan gelen bir uyarıyı engellemek genellikle GÜVENLI DEĞİlDİr.