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
Libérer: 2025-01-22 13:52:18
original
738 Les gens l'ont consulté

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 :

public static string GetAllItems<T>(..., Func<ListItem, T> del) {
    ...
    List<T> tabListItems = new List<T>();
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(del(listItem));
    }
    ...
}
Copier après la connexion

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 :

GetAllItems<Foo>(..., l => new Foo(l));
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal