有没有一种方法可以创建一个通用方法,该方法使用 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/