CA2018: için count
Buffer.BlockCopy
bağımsız değişken, kopyalanacak bayt sayısını belirtmelidir
Özellik | Değer |
---|---|
Kural Kimliği | CA2018 |
Başlık | öğesinin count Buffer.BlockCopy bağımsız değişkeni, kopyalanacak bayt sayısını belirtmelidir |
Kategori | Güvenilirlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | Uyarı olarak |
Neden
Bu kural, öğeleri boyutu bir bayttan büyük olan dizilerde bağımsız değişkeni Buffer.BlockCopy
için count
kullanıldığında tetiklenirArray.Length
.
Kural açıklaması
kullanılırken Buffer.BlockCopy
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 count
kullanmalısınızArray.Length
. byte
, sbyte
ve bool
dizileri tek bayt boyutunda öğelere sahiptir.
İhlalleri düzeltme
Bağımsız değişken için count
kopyalamak istediğiniz bayt sayısını belirtin.
Ö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.