Maison >développement back-end >C++ >Comment transmettre des arguments à une contrainte générique `new()` C# lors de la création d'objets ?

Comment transmettre des arguments à une contrainte générique `new()` C# lors de la création d'objets ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 13:52:18720parcourir

How to Pass Arguments to a C# Generic `new()` Constraint When Creating Objects?

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!

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