拡張メソッドと dynamic
提供されたコードは、C# コンパイラーとダイナミック言語ランタイム (DLR) が拡張メソッドを処理する方法における重要な違いを示しています。
list.First()
のような標準拡張メソッド呼び出しは、コンパイラがコンパイル時に First()
メソッドを静的に解決するため、シームレスに機能します。 既知の名前空間を検索し、ディレクティブを使用して正しい拡張メソッド定義を見つけます。
ただし、dynamic
と同様に dList.First()
を使用する場合、解決は DLR による実行時まで延期されます。 DLR には、名前空間に関するコンパイラの知識と実行時のディレクティブの使用にアクセスする機能がありません。 この制限により、DLR は拡張メソッドを正しく見つけることができず、実行時例外が発生します。
本質的に、コンパイラの静的解析は拡張メソッドを解決するために必要な情報を提供しますが、DLR のランタイム解決にはこの重要なコンテキストが欠けています。 したがって、dynamic
オブジェクトで拡張メソッドを直接使用することには問題があります。
以上が拡張メソッドで「dynamic」を使用すると例外がスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。