簡體   English   中英

C#泛型方法,在new()構造函數約束中輸入參數

[英]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#中使用此功能!

並不是的; 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));

不幸的是,通用約束只允許你包括:

where T : new()

其中指定存在默認的無參數構造函數。 沒有辦法約束到具有接受特定參數類型的構造函數的類型。

有關詳細信息,請參閱類型參數的約束

不,在C#中不可能將泛型類型約束為具有特定簽名的構造函數。 new()僅支持無參數構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM