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
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기