首页 >后端开发 >C++ >如何在 C# 中使用构造函数创建泛型类型的实例?

如何在 C# 中使用构造函数创建泛型类型的实例?

Patricia Arquette
Patricia Arquette原创
2025-01-22 13:42:111013浏览

How Can I Create Instances of Generic Types with Constructors in C#?

在C#中使用构造函数创建泛型类型的实例

在C#中,使用构造函数创建泛型类型的新对象可能是一个挑战。考虑以下场景:

<code class="language-csharp">// 创建类型为T的对象列表
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>

尝试编译此代码时,可能会遇到编译器错误,指出在创建变量T的实例时无法提供参数。这是因为new()约束仅允许创建没有参数的对象。

解决方案:使用函数

为了克服此限制,您可以提供一个参数,该参数允许基于参数创建对象。一个方便的解决方案是使用函数:

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

调用函数

要使用此函数,您可以按如下方式调用它:

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

这种方法允许您创建具有构造函数的泛型类型的新对象,即使在泛型函数中也是如此。

以上是如何在 C# 中使用构造函数创建泛型类型的实例?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn