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
230 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.

<code class="language-csharp">public static string GetAllItems<T>(...) where T : new()
{
   List<T> tabListItems = new List<T>();
   foreach (ListItem listItem in listCollection) 
   {
       tabListItems.Add(new T(listItem)); // 此处出错。
   } 
   ...
}</code>
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 :

<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>
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 :

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
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!

source:php.cn
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