新しい System.Linq.Queryable メソッドのオーバーロード

https://github.com/dotnet/runtime/pull/47231 に実装されている新機能の一部として、追加のパブリック メソッド オーバーロードが System.Linq.Queryable に追加されました。 メソッドの検索時にリフレクション コードの堅牢性が不足していると、これらの追加機能によってクエリ プロバイダーの実装が破損するおそれがあります。

変更の説明

.NET 6 では、新しいオーバーロードが「影響を受ける API」セクションに記載されているメソッドに追加されました。 これらの追加の結果として、次の例に示すようなリフレクション コードが破損するおそれがあります。

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

このリフレクション コードは、"シーケンスに複数の要素が含まれています" といったメッセージと共に InvalidOperationException をスローするようになりました。

導入されたバージョン

.NET 6

変更理由

LINQ Queryable API を拡張するために新しいオーバーロードが追加されました。

クエリプロバイダー ライブラリの作成者は、リフレクション コードをメソッド オーバーロードの追加に確実に耐えられるようにします。 たとえば、メソッドのパラメーターの型を明示的に受け入れる Type.GetMethod オーバーロードを使用します。

影響を受ける API

次の Queryable 拡張メソッドに新しいオーバーロードが追加されました。