Aracılığıyla paylaş


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

Özellik Değer
Kural Kimliği CA2018
Başlık öğesinin countBuffer.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.BlockCopycount 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, sbyteve 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.

Ayrıca bkz.