2011-06-20 27 views
54

我有一個泛型類,我想用泛型類型實例化一個對象。我想爲該類型的構造函數使用參數。C#中的泛型 - 我如何創建一個帶有參數的變量類型的實例?

我的代碼:

public class GenericClass<T> where T : Some_Base_Class, new() 
{ 
    public static T SomeFunction(string s) 
    { 
     if (String.IsNullOrEmpty(s)) 
      return new T(some_param); 
    } 
} 

我上

new T(some_param) 

'T' 的錯誤:創建變量 類型的實例時無法提供參數

任何想法如何我可以這樣做嗎?

+0

你會做這樣頻繁?什麼版本的C#? –

+0

[this](http://stackoverflow.com/questions/840261/c-generic-new-constructor-problem/840299#840299)是我已經能夠找到的最佳解決方法.... –

+0

另一種方法是在'Some_Base_Class'上創建一個公共屬性,然後你可以執行以下操作:'new T(){SomeProperty =「value」}' – nZeus

回答

85

看看Activator.CreateInstance。例如:

var instance = Activator.CreateInstance(typeof(T), new object[] { null, null }); 

顯然與由該類型的構造函數之一預期適當的值替換null秒。

如果您收到有關cannot convert object to type T編譯器錯誤,那麼包括as T

var instance = Activator.CreateInstance(typeof(T), 
        new object[] { null, null }) as T; 
+0

這是正確的方法。 –

+0

完美!非常感謝! :) – Roman

+0

這將工作得很好,雖然它很慢並且不是一個很好的選擇,如果您必須多次構建相同的對象類型。 –

相關問題