c#-4.0 - 时间:2019-03-17 标签:c#genericsnew()constraints with type : (new(T))

标签 c#-4.0 generics

我正在构建一个小助手来将 EF4 对象转换为 POCO。 (我知道有AutoMapper,但我此时遇到了c#的困境)

我怎样才能完成这项工作(其中 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;

最佳答案

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

public static List<P> ListConvert<E, P>(List<E> efList, Func<E, P> func)

这样就不需要是构造函数,但您可以传入一个委托(delegate)来调用构造函数:

ListConvert(list, x => new Foo(x))

我有一个天马行空的想法,可以启用构造函数约束,称为 "static interfaces" - 这些仅对通用约束有用,但也可以启用某些运算符用例。

关于c#-4.0 - 时间:2019-03-17 标签:c#genericsnew()constraints with type : (new(T)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682964/

相关文章:

c# - 如何使用 NAudio 将任何音频格式转换为 mp3

c# - 如何按键选择组合框中的项目?

java - 为什么 Java 编译器在构造函数实例化中会丢失对泛型类型的跟踪?

.net - 使用带有泛型类型参数的异常是好是坏

java - 通用数字补间(帮我做一个奇怪的技巧..)

asp.net-mvc-3 - 在 MVC3 中使用 AutoMapper 绑定(bind)自定义属性

c# - 在 asp.net 中使用 c# 进行 session 管理

c# - 如何以编程方式添加 TemplateField

.net - 非统一实例化的用法是什么意思?

java - 什么是原始类型,为什么我们不应该使用它呢?