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 拡張メソッドに対して新しいオーバーロードが追加されました。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET