ホームページ >バックエンド開発 >C++ >なぜ「リスト」をC#の「リスト」変数に直接割り当てることができないのですか?

なぜ「リスト」をC#の「リスト」変数に直接割り当てることができないのですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-28 13:31:09828ブラウズ

Why Can't a `List` Be Directly Assigned to a `List` Variable in C#?

なぜc#?List<string>でaList<object>にa

に割り当てられないのですか C#では、a

をAList<string>変数に直接割り当てると、コンパイラエラーが発生します。 暗黙的な変換は許可されておらず、List<object>を使用した明示的なキャストも失敗します。 (List<object>)

理由:

この制限は、安全なタイプによるものです。 そのような割り当てが許可されたと想像してください。次に、

(整数またはカスタムクラスなど)以外のタイプのオブジェクトを

に追加できます。 ただし、これは元々はstringでした。 A の参照を使用してこのリストから要素にアクセスしようとすると、非ストリング要素に遭遇したときにList<object>につながります。 コンパイラは、割り当てを許可することにより、この潜在的なランタイムエラーを防ぎます。 List<object>List<string>回避策:stringSystem.InvalidCastException

直接の割り当ては不可能ですが、代替方法を使用して目的の効果を達成できます。

iterative Copyying:

最も単純なアプローチは、

を反復し、各要素を個別に新しい
  1. linq:List<string>より簡潔なソリューションは、linqのList<object>メソッド:

    を使用します
  2. リバースキャスト:Cast<T>

    <code class="language-csharp">List<string> stringList = new List<string> { "apple", "banana", "cherry" };
    List<object> objectList = stringList.Cast<object>().ToList();</code>
から

までの逆キャストは、別の問題です。 これは、一般に、のすべての要素が実際にであることを絶対に確信していない限り、許可されていません。 これが真でないときにキャストしようとすると、ランタイム例外が生じます。 C#は、このようなシナリオを防ぐためにタイプの安全性を強制します。 小切手を実行するか、LINQの

メソッドを使用して、文字列要素のみを安全にフィルタリングおよびキャストする必要があります。 したがって、

逆操作は類似しているように見えるかもしれませんが、C#の基礎となるタイプの安全メカニズムは、それが単純な操作にならないようにします。 一般的なリストとタイプ変換を使用する場合、要素タイプを慎重に検討することが重要です。

以上がなぜ「リスト」をC#の「リスト」変数に直接割り当てることができないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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