c# - 为通用参数指定构造函数约束

标签 c# generics extension-methods type-constraints

<分区>

我有一组对象,我将其作为参数传递以创建另一种类型的对象(一对一)。我在很多地方都这样做(基本上是从数据对象转换为业务对象)。我想写一个通用的扩展方法来完成这个。但是我被卡住了,因为我不知道如何指定业务对象具有将数据对象作为参数的构造函数的约束。以下是我的函数代码:

public static IList<T> ConvertTo<A,T>(this IEnumerable<A> list) 
                    where T : new(A)/*THIS IS PROBLEM PART*/
{
    var ret = new List<T>();

    foreach (var item in list)
    {
        ret.Add(new T(item));
    }
    return ret;
}

最佳答案

不幸的是,这在 C# 中是不允许的。您可以使用 new() 约束强制类型具有默认构造函数,但这是 .NET 支持的唯一与构造函数相关的约束。

您最好的选择可能是定义一个您可以使用的接口(interface),并限制到该接口(interface)。无需尝试在构造时设置对象,您可以使用“初始化”样式的方法来获取“A”对象并调用它。

关于c# - 为通用参数指定构造函数约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408044/

相关文章:

Java 8 下界通配符

java - 实现java接口(interface)并使用泛型

c# - 如何在 TrackBar 中使用 float

c# - 参数为空时如何解决歧义?

c# - 在帮助文件中嵌入代码区域

c# - 重载方法以支持引用类型和可空类型

ios - Swift 扩展类型约束

c# - DDD : one-to-many relationship between user aggregate root and almost all entities in other aggregates

c# - 通用函数将元素添加到列表

c# - 为不支持的类型列出的扩展方法。为什么?