Liste de coulée
Considérez le code suivant :
public interface IDic { int Id { get; set; } string Name { get; set; } } public class Client : IDic { } List<Client> clients = new List<Client>();
De nombreux programmeurs peuvent supposer qu'ils peuvent diffuser cette List
List<IDic> dics = (List<IDic>)clients;
Cependant, ce n'est pas une distribution valide. Ce type de conversion n'est pas autorisé car il violerait la sécurité du type. Si vous tentez cette diffusion, l'erreur suivante se produira :
Cannot convert type 'System.Collections.Generic.List<Client>' to 'System.Collections.Generic.List<IDic>'
Pourquoi cette diffusion n'est-elle pas autorisée ?
La raison pour laquelle cette diffusion est refusée est due à la potentiel de comportement dangereux. Par exemple, imaginez ce scénario :
public interface IFruit {} public class Apple : IFruit {} public class Banana : IFruit {} ... List<Apple> apples = new List<Apple>(); List<IFruit> fruit = (List<IFruit>)apples; // Assumed cast fruit.Add(new Banana()); // Eek - it's a banana! Apple apple = apples[0];
Dans cet exemple, la liste
Options de conversion sécurisées
Bien que vous ne puissiez pas lancer directement une liste
List<IFruit> fruit = apples.ToList<IFruit>();
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
Il est important de noter que ces conversions créent de nouvelles listes. Les modifications apportées à une liste ne seront pas reflétées dans l'autre. Cependant, les modifications apportées aux objets dans les listes seront visibles dans les deux listes.
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!