Поделиться через


Новые перегрузки методов 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 примерно с таким сообщением: Последовательность содержит более одного элемента.

Представленные версии

.NET 6

Причина изменения

Новые перегрузки были добавлены для расширения API Queryable LINQ.

Если вы создаете библиотеки для поставщика запросов, убедитесь, что ваш код отражения устойчив к добавлению перегрузок методов. Например, используйте перегрузку Type.GetMethod, которая явным образом принимает типы параметров метода.

Затронутые API

Новые перегрузки были добавлены в следующие методы расширения Queryable: