Maison > développement back-end > C++ > Comment puis-je transmettre des arguments de constructeur à une contrainte générique `new()` en C# ?

Comment puis-je transmettre des arguments de constructeur à une contrainte générique `new()` en C# ?

Susan Sarandon
Libérer: 2025-01-22 13:36:14
original
323 Les gens l'ont consulté

How Can I Pass Constructor Arguments to a Generic `new()` Constraint in C#?

Passer des génériques pour les types de modèles en C# new() paramètres du constructeur

Question :

Une erreur de compilation se produit lors de la tentative de création d'un nouvel objet de type T avec un argument constructeur dans une méthode générique utilisant la contrainte new(). Le message d'erreur indique que le paramètre ne peut pas être fourni lors de l'initialisation de l'objet.

public static string GetAllItems<T>(...) where T : new()
{
   List<T> tabListItems = new List<T>();
   foreach (ListItem listItem in listCollection) 
   {
       tabListItems.Add(new T(listItem)); // 此处出错。
   } 
   ...
}
Copier après la connexion

Solution :

Pour créer un objet de type générique à l'aide d'arguments du constructeur, il ne suffit pas d'utiliser simplement la contrainte new. Une fonction personnalisée doit être introduite pour gérer l'initialisation avec les paramètres nécessaires. Voici comment procéder :

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

En utilisant une fonction personnalisée, vous pouvez appeler une méthode générique, spécifier le type et fournir une fonction d'initialisation comme suit :

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

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