質問: dynamicObjects.Select(s => makeStringBuilder(s)).Cast(); } private StringBuilder makeStringBuilder(dynamic s) { return new StringBuilder(s); } ``` 上の例では、これを処理するための推奨方法はありますか?この怪我のようにキャストしていますか?ありがとう!
回答: `dynamic`でも、パラメータとして使用`dynamic`場合でも、式全体が動的バインディングによって処理され、コンパイル時に(その実行時の型に基づいているため)「動的」になります。これはC#仕様の7.2.2でカバーされています: > しかし、式が動的式である場合(つまり、型が動的である場合)、これは、それが関与するバインディングは実行時の型(つまり、実行時に示すオブジェクトの実際の型)に基づいている必要があることを示します。コンパイル時に持っている型よりも。したがって、このような操作のバインディングは、プログラムの実行中に操作が実行される時間まで延期されます。これは動的バインディングと呼ばれます。 > > あなたの場合、キャストを使用すると安全に`IEnumerable`に変換され、パフォーマンスにはほとんど影響しません。 `example2`バージョンは、非常にわずかよりも効率的である`example3`バージョンが、この方法で使用する場合の両方が非常にわずかなオーバーヘッドを持っています。