首页 > 后端开发 > C++ > 创建对象时如何将参数传递给 C# 通用 `new()` 约束?

创建对象时如何将参数传递给 C# 通用 `new()` 约束?

Linda Hamilton
发布: 2025-01-22 13:52:18
原创
736 人浏览过

How to Pass Arguments to a C# Generic `new()` Constraint When Creating Objects?

向 C# 泛型模板类型的 new() 传递参数

在列表扩展期间尝试使用其构造函数创建泛型类型 T 的新对象时,您可能会遇到编译错误,声称“T:在创建变量实例时无法提供参数”。

此错误是因为您尝试为使用“new”标志约束的泛型类型调用带有参数的构造函数,该标志仅允许实例化没有构造函数参数的对象。

解决方案:

要创建具有构造函数参数的泛型类型的对象,您需要删除“new”约束,而是提供一个委托,该委托可以根据指定的参数创建对象。以下是一个示例:

public static string GetAllItems<T>(..., Func<ListItem, T> del) {
    ...
    List<T> tabListItems = new List<T>();
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(del(listItem));
    }
    ...
}
登录后复制

此函数接受一个委托 del,它将 ListItem 作为参数并返回类型为 T 的对象。然后,您可以调用此函数并将 lambda 表达式作为委托传递,以创建具有必要参数的所需类型的对象:

GetAllItems<Foo>(..., l => new Foo(l));
登录后复制

通过使用委托,您可以为要创建的对象提供自定义初始化逻辑,同时仍然保持泛型编程的灵活性。

以上是创建对象时如何将参数传递给 C# 通用 `new()` 约束?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板