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

The*_*iot 10 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;
}
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 13

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

您最好的选择可能是定义一个可以使用的界面,并约束到界面.您可以使用"初始化"样式方法来获取"A"对象,然后调用它,而不是尝试在构造时设置对象.