CA2018:
| 속성 | 값 |
|---|---|
| 규칙 ID | CA2018 |
| 제목 |
count에 대한 Buffer.BlockCopy 인수는 복사할 바이트 수를 지정해야 함 |
| 범주 | 신뢰성 |
| 수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
| .NET 10에서 기본적으로 사용하도록 설정 | 경고로 |
원인
이 규칙은 요소의 크기가 1바이트보다 큰 배열에서 Array.Length의 count 인수에 대해 Buffer.BlockCopy가 사용된 경우에 트리거됩니다.
규칙 설명
Buffer.BlockCopy를 사용하는 경우 count 인수는 복사할 바이트 수를 지정합니다. 요소 크기가 정확히 1바이트인 배열의 Array.Length 인수에 대해서만 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);
}
}
Fix:
배열 요소의 크기가 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에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET