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

29 浏览
0 Comments

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

我有一个对象集合,我将其作为参数传递以创建另一种类型的对象(一对一)。我在许多地方都这样做(基本上是从数据对象转换为业务对象)。我想编写一个通用的扩展方法来实现这个目标。但是我遇到了困难,因为我不知道如何指定业务对象必须有一个以数据对象为参数的构造函数的约束条件。以下是我的函数代码:\n

public static IList ConvertTo(this IEnumerable list) 
                    where T : new(A)/*这是问题的部分*/
{
    var ret = new List();
    foreach (var item in list)
    {
        ret.Add(new T(item));
    }
    return ret;
}

0
0 Comments
0
0 Comments

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

解决方法是定义一个可以使用的接口,并对接口进行约束。而不是在构造函数中设置对象,可以使用一种“初始化”风格的方法来接收“A”对象,并在该方法中调用。

是的,使用接口的方式很好,我可以使用它,因为我正在使用T4模板来生成BOs,所以工作量不会太大。

0