CA2018: countBuffer.BlockCopy için bağımsız değişken, kopyalanacak bayt sayısını belirtmelidir

Ö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.

Ayrıca bkz.