CA2018: Buffer.BlockCopy
に対する count
の引数で、コピーするバイト数を指定する必要がある
プロパティ | 値 |
---|---|
ルール ID | CA2018 |
Title | Buffer.BlockCopy に対する引数 count で、コピーするバイト数を指定する必要があります |
[カテゴリ] | 信頼性 |
修正が中断ありか中断なしか | なし |
.NET 8 では既定で有効 | 警告として |
原因
この規則は、要素のサイズが 1 バイトより大きい配列で、Array.Length
が Buffer.BlockCopy
の count
引数で使用されるときに適用されます。
規則の説明
Buffer.BlockCopy
を使用するとき、count
引数では、コピーするバイト数を指定します。 Array.Length
は、その要素のサイズが正確に 1 バイトの配列上の count
要素にのみ使用します。 byte
、sbyte
、および bool
には、サイズが 1 バイトの要素があります。
違反の修正方法
count
引数に対してコピーするバイト数を指定します。
例
違反:
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);
}
}
修正:
配列の要素のサイズが 1 バイトより大きい場合、配列の長さに要素のサイズを掛けるとバイト数が得られます。
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));
}
}
どのようなときに警告を抑制するか
この規則からの警告を抑制することは一般的に安全ではありません。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET