Maison >développement back-end >C++ >Pourquoi ne puis-je pas lancer une «liste» dans une «liste» en C #?

Pourquoi ne puis-je pas lancer une «liste» dans une «liste» en C #?

Susan Sarandon
Susan Sarandonoriginal
2025-01-28 13:51:09817parcourir

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

C # Problème de conversion de type: pourquoi

ne peut pas être converti en List<string>? List<object>

En C #, essayez d'attribuer

des objets aux variables List<string> pour provoquer une anomalie intéressante. Pourquoi cette conversion n'est pas autorisée et a toujours troublé de nombreux développeurs. List<object>

Analyse des problèmes

Considérez le fragment de code suivant:

Les tentatives d'intérêt et de conversion explicites ont échoué, ce qui nous a fait nous demander la raison.
<code class="language-csharp">List<string> sl = new List<string>();
List<object> ol;
ol = sl; // 隐式转换不被允许
ol = (List<object>)sl; // 显式转换也失败</code>

La cause racine

La principale raison de cette limite est que l'incohérence peut se produire dans la liste. Si nous permettons cette conversion, puis ajoutons le type de à la liste à la liste, la liste des chaînes deviendra incohérente.

Lorsque la première liste de l'itération est référencée, nous rencontrerons une conversion de classe anormale, car l'instance Foo ne peut pas être convertie en chaîne. La cohérence du type de maintenance est essentielle pour assurer l'intégrité des données dans la liste.

Conversion inversée: plus de discussion en tabage Foo

Cependant, à propos de la conversion inverse, un problème intéressant est apparu:

Cette conversion est-elle autorisée? Bien que cela puisse sembler utile, permettre cette conversion peut être une erreur ou une incohérence pendant l'exécution. D'une classe plus générale () à la conversion de classes plus spécifiques (

), tout objet ajouté à la liste de chaînes peut ne pas être compatible avec la liste d'objets.

<code class="language-csharp">List<object> ol = new List<object>();
List<string> sl;
sl = (List<string>)ol;</code>
La conversion inverse peut-elle réussir en C #?

object Il n'est pas clair si cette conversion inversée est légale en C #. S'il est légal, il mettra en évidence la différence entre la conversion cachée d'affichage et la conversion explicite, et ce dernier semble violer la règle de cohérence du type. Les tests et clarification supplémentaires de cet aspect seront très précieux. string

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn