C# 泛型方法,new() 构造函数约束中的类型参数

标签 c# .net generics type-constraints

有没有一种方法可以创建一个通用方法,该方法使用 new() 约束来要求类具有特定类型的构造函数属性?

例如:

我有以下代码:

public T MyGenericMethod<T>(MyClass c) where T : class
{
    if (typeof(T).GetConstructor(new Type[] { typeof(MyClass) }) == null)
    {
        throw new ArgumentException("Invalid class supplied");
    }
    // ...
}

有没有可能用这样的东西代替?

public T MyGenericMethod<T>(MyClass c) where T : new(MyClass)
{
    // ...
}

编辑:有 a suggestion对此。请投票,以便我们可以在 C# 中使用此功能!

编辑 2: 该网站已被关闭。现在建议在Github .跟进那里!

最佳答案

不是真的; C# 仅支持无参数构造函数约束。

我对通用 arg 构造函数使用的解决方法是将构造函数指定为委托(delegate):

public T MyGenericMethod<T>(MyClass c, Func<MyClass, T> ctor) {
    // ...
    T newTObj = ctor(c);
    // ...
}

然后调用时:

MyClass c = new MyClass();
MyGenericMethod<OtherClass>(c, co => new OtherClass(co));

关于C# 泛型方法,new() 构造函数约束中的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3364447/

相关文章:

c# - 使用 Oxyplot Visual Studio C# 的折线图

c# - 通过 AutoMapper 映射获取相关数据?

c# - Linq To XML、yield 等

.net 反射程序集加载异常

java - 如何安全地将通用通配符 "?"转换为 Java 中的已知类型参数?

c# - 使用泛型的 C# 方法多态性的性能

c# - 如何让线程以正确的顺序运行

c# - 如何让devexpress gridcontrol的indicator显示文字加粗

.net - .net程序如何 self 更新?

C# 通用速记和向上转型