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