Maison >développement back-end >C++ >Comment puis-je transmettre des arguments de constructeur à une contrainte générique `new()` en C# ?
new()
paramètres du constructeurQuestion :
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>
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>
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>
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!