CA2018:
| プロパティ | 値 |
|---|---|
| ルール ID | CA2018 |
| Title |
count に対する引数 Buffer.BlockCopy で、コピーするバイト数を指定する必要があります |
| [カテゴリ] | 信頼性 |
| 修正が中断ありか中断なしか | なし |
| .NET 10 で既定で有効 | 警告として |
原因
この規則は、要素のサイズが 1 バイトより大きい配列で、Array.Length が count の Buffer.BlockCopy 引数で使用されるときに適用されます。
規則の説明
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