c#泛型new()约束类型:(new(T))

Dan*_*ani 6 generics c#-4.0

我正在构建一个小帮手,将EF4对象转换为POCO.(我知道有AutoMapper,但我此时正处于ac #dilemma)

我怎样才能完成这项工作(P:new(E)不合法的地方我希望确保P(POCO)类作为接受E类的构造函数(因此处理转换)

我怎样才能做到这一点?

如何在C#中创建一个可以采用新(类型)约束的泛型函数?

   public static List<P> ListConvert<E, P>(List<E> efList) where P: new(E)
    {
        List<P> pList = new List<P>();

        foreach (E item in efList)
        {
            P myItem = new P(item);
            pList.Add(myItem);
        }
        return pList;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

没有这样的限制.你可以做的是有一个额外的参数:

public static List<P> ListConvert<E, P>(List<E> efList, Func<E, P> func)
Run Code Online (Sandbox Code Playgroud)

这样,它不需要是构造函数,但您可以传入一个调用构造函数的委托:

ListConvert(list, x => new Foo(x))
Run Code Online (Sandbox Code Playgroud)

我有一个蓝天的想法,它将启用构造函数约束,称为"静态接口" - 这些只对通用约束有用,但也会启用一些操作符用例.