Maison >développement back-end >C++ >Pourquoi ne puis-je pas lancer une «liste» dans une «liste» en C #?
ne peut pas être converti en List<string>
? List<object>
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>
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!