새 System.Linq.Queryable 메서드 오버로드

System.Linq.Queryable에 구현된 새 기능의 일부로 추가 퍼블릭 메서드 오버로드가 https://github.com/dotnet/runtime/pull/47231에 추가되었습니다. 메서드를 조회할 때 리플렉션 코드가 충분히 강력하지 않으면 이 추가로 인해 쿼리 공급자 구현이 손상될 수 있습니다.

변경 내용 설명

.NET 6에서 영향을 받는 API 섹션에 나열된 메서드에 새 오버로드가 추가되었습니다. 다음 예제에 나와 있는 것처럼 리플렉션 코드는 이 추가의 결과로 손상될 수 있습니다.

typeof(System.Linq.Queryable)
    .GetMethods(BindingFlags.Public | BindingFlags.Static)
    .Where(m => m.Name == "ElementAt")
    .Single();

이제 이 리플렉션 코드는 다음과 유사한 메시지를 표시하며 InvalidOperationException을 throw합니다. 시퀀스에 요소가 두 개 이상 있습니다.

도입된 버전

.NET 6

변경 이유

LINQ Queryable API를 확장하기 위해 새 오버로드가 추가되었습니다.

쿼리 공급자 라이브러리 작성자인 경우 리플렉션 코드에서 메서드 오버로드 추가를 허용하는지 확인합니다. 예를 들어 메서드의 매개 변수 형식을 명시적으로 허용하는 Type.GetMethod 오버로드를 사용합니다.

영향을 받는 API

다음 확장 Queryable 메서드의 새 오버로드가 추가되었습니다.