次の方法で共有


新しい 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 をスローします。 Sequence には複数の要素が含まれています

導入されたバージョン

.NET 6

変更の理由

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

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

影響を受ける API

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