ホームページ >バックエンド開発 >C++ >C#で「リスト」を「リスト」に変換できないのはなぜですか?

C#で「リスト」を「リスト」に変換できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-30 13:06:11747ブラウズ

Why Can't I Convert a `List` to a `List` in C#?

不変リスト:変換制限の理解

派生クラスのリストを基本クラスのリストを期待する関数に渡すと、開発者はエラーに遭遇する可能性があります。 🎜>
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。