cannot convert from 'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>' to 'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'
このエラーはすぐに直感的ではありません。派生クラスのリストは、基本クラスのリストと互換性があると仮定する可能性があるためです。この制限の背後にある理由を理解するには、一般的なコレクションの共分散の概念を把握することが不可欠です。 C#は、共変動または不変のいずれかです。共変コレクションは、ベースタイプに派生したタイプを置換することを可能にしますが、不変のコレクションはそうではありません。は、
invariantコレクションの例です。これは、リスト&lt; derivedclass&gt;リスト&lt; baseclass&gt;に割り当てることはできません。コンパイラは、リスト内のすべての要素が常に宣言されたタイプTのものであることを保証するため。 T&gt;タイプの安全性に違反する可能性のある無効な操作から保護します。たとえば、リスト&lt; baseclass&gt;の場合リストに割り当てられています&lt; derivedclass&gt;、派生クラスのインスタンスを基本クラスのインスタンスに置き換える可能性があり、予期しない動作につながる可能性があります。 >派生クラスのリストを基本クラスのリストを期待する関数に安全に渡すために、開発者はienumerable&lt; t&gt;を利用できます。これにより、ベースタイプの派生タイプの置換が可能になり、タイプの安全性を損なうことなく変換の問題を解決します。
以上がC#で「リスト」を「リスト」に変換できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。