Share via


RuntimeHelpers.GetSubArray가 다른 형식을 반환함

RuntimeHelpers.GetSubArray<T>(T[], Range)이(가) 반환한 배열 인스턴스의 유형이 원본 배열과 일치하도록 변경되었습니다. RuntimeHelpers.GetSubArray은(는) 배열에 대한 범위 연산자를 구현하기 위해 C# 컴파일러에서 사용됩니다.

이 동작 변경은 공변 배열 변환을 사용하는 코드에서만 관찰할 수 있습니다.

이전 동작

이전에는 RuntimeHelpers.GetSubArray<T>(T[] array, Range range)이(가) T[] 형식의 배열 인스턴스를 반환했습니다.

예를 들어 RuntimeHelpers.GetSubArray<object>(new string[1], ...)이(가) 반환한 배열 인스턴스의 형식은 object[](이)였습니다.

새 동작

.NET 9부터 RuntimeHelpers.GetSubArray<T>(T[] array, Range range)은(는) array 매개 변수와 동일한 형식의 배열 인스턴스를 반환합니다.

예를 들어 RuntimeHelpers.GetSubArray<object>(new string[1], ...)이(가) 반환하는 배열 인스턴스의 형식은 string[]입니다.

도입된 버전

.NET 9 미리 보기 1

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

C# 패턴 일치 기능의 디자인에서는 RuntimeHelpers.GetSubArray<T>(T[], Range)이(가) 반환하는 배열 인스턴스의 형식이 원본 배열과 일치한다고 가정합니다. 이전 동작으로 인해 공변 배열의 조각화를 사용하는 특정 복합 패턴 식의 예기치 않은 동작이 발생했습니다. 자세한 내용은 dotnet/roslyn#69053을 참조하세요.

권장되는 작업은 배열 공변성에서 영향을 받는 코드의 종속성을 제거하는 것입니다.

예를 들어 다음을 변경합니다.

object[] arr = new string[1];
M(arr[1..2]);

다음과 같이 변경합니다.

string[] arr = new string[1];
M(arr[1..2]);

영향을 받는 API