Lorsque vous utilisez une liste générique en C #, essayez d'attribuer la liste du type dérivé à la liste du type de type dérivé. Ce problème est causé par le conflit entre le type de sécurité et la compilation de la sécurité des types pendant l'exécution. Exemple de question et de code
Considérez le code suivant:
Dans cet exemple, en raison de la vérification d'exécution, il est efficace d'attribuer le réseau de girafe au tableau animal. Cependant, la distribution de la liste à liste
entraînera des erreurs pendant la compilation.Problèmes différents et de sécurité
class Animal { } class Giraffe : Animal { } static void Main(string[] args) { // 数组赋值有效,但是... Animal[] animals = new Giraffe[10]; // 隐式转换失败 List<Animal> animalsList = new List<Giraffe>(); //编译错误 // 显式转换也失败 List<Animal> animalsList2 = (List<Animal>) new List<Giraffe>(); //编译错误 }
Cependant, cette affectation peut entraîner des problèmes de sécurité. Si l'objet New Lion est ajouté à AnimalsList, il peut être attribué à AnimalList2 sans aucune vérification de compilation, même s'il viole le type de sécurité de type de liste d'animaux.
Solution en C #
C # 4 La différence carrée de sécurité:
C # 4 introduit la prise en charge de la variance de sécurité des interfaces et de la configuration. Func
Dans C # 2, vous pouvez utiliser la liste .Convertall pour créer une nouvelle liste avec le type requis.
Conclusion
C # Le problème de variance met en évidence l'importance de maintenir la sécurité du type pendant l'affectation générique. Bien que le nombre de chèques de tableau ou d'exécution puisse être utilisé pour obtenir des carrés dangereux, la variance de sécurité avec les interfaces et les attributions peut garantir le type correct du type pendant la compilation. Pour la première version de C #, vous pouvez utiliser List
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!