Maison >développement back-end >C++ >Comment puis-je transmettre des arguments à un constructeur générique en C# à l'aide de la contrainte « new() » ?

Comment puis-je transmettre des arguments à un constructeur générique en C# à l'aide de la contrainte « new() » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 13:57:11277parcourir

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

Utiliser les contraintes new() en C# pour transmettre des paramètres aux constructeurs génériques

Lorsque vous ajoutez des éléments à une liste, en essayant de créer un nouvel objet de type T avec des paramètres de constructeur, vous pouvez rencontrer une erreur de compilation indiquant que les paramètres ne peuvent pas être fournis lors de la création d'une instance de variable. Cette erreur se produit même s'il existe des paramètres de constructeur dans la classe.

Pour résoudre ce problème, new() des contraintes de types génériques doivent être utilisées. Bien que cette contrainte permette la création d'instances sans paramètres, elle n'est pas suffisante dans le cas où les paramètres du constructeur sont inclus.

L'alternative est d'introduire un paramètre pour que l'objet soit créé en fonction du paramètre. Les fonctions peuvent accomplir cela efficacement.

<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 peut être appelée à l'aide d'une expression lambda qui crée un nouvel objet avec les paramètres requis :

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>

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