[英]C# generic methods, type parameters in new() constructor constraint
有沒有辦法創建一個使用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)
{
// ...
}
並不是的; C#僅支持no-args構造函數約束。
我用於通用arg構造函數的解決方法是將構造函數指定為委托:
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()僅支持無參數構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.