なぜc#?List<string>
でaList<object>
にa
をAList<string>
変数に直接割り当てると、コンパイラエラーが発生します。 暗黙的な変換は許可されておらず、List<object>
を使用した明示的なキャストも失敗します。
(List<object>)
この制限は、安全なタイプによるものです。 そのような割り当てが許可されたと想像してください。次に、
(整数またはカスタムクラスなど)以外のタイプのオブジェクトをに追加できます。 ただし、これは元々はstring
でした。 A List<object>
につながります。 コンパイラは、割り当てを許可することにより、この潜在的なランタイムエラーを防ぎます。
List<object>
List<string>
回避策:string
System.InvalidCastException
iterative Copyying:
最も単純なアプローチは、
を反復し、各要素を個別に新しい
linq:List<string>
より簡潔なソリューションは、linqのList<object>
メソッド:
リバースキャスト: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 サイトの他の関連記事を参照してください。