Maison >développement back-end >C++ >Comment transmettre des arguments à une contrainte générique `new()` C# lors de la création d'objets ?
Passer les paramètres à new()
du type de modèle générique C#
Lorsque vous essayez de créer un nouvel objet de type générique T à l'aide de son constructeur lors de l'expansion de la liste, vous pouvez rencontrer une erreur de compilation affirmant "T : ne peut pas fournir d'arguments lors de la création d'une instance de variable".
Cette erreur se produit parce que vous essayez d'appeler un constructeur avec des paramètres pour un type générique contraint à l'aide de l'indicateur "nouveau", qui permet uniquement l'instanciation d'objets sans paramètres de constructeur.
Solution :
Pour créer un objet de type générique avec des paramètres de constructeur, vous devez supprimer la contrainte "nouvelle" et fournir à la place un délégué qui crée l'objet en fonction des paramètres spécifiés. Voici un exemple :
<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> del) { ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(del(listItem)); } ... }</code>
Cette fonction accepte un délégué del
qui prend un ListItem en paramètre et renvoie un objet de type T. Vous pouvez ensuite appeler cette fonction et passer l'expression lambda en tant que délégué pour créer un objet du type requis avec les paramètres nécessaires :
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
En utilisant des délégués, vous pouvez fournir une logique d'initialisation personnalisée pour les objets que vous souhaitez créer tout en conservant la flexibilité de la programmation générique.
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!