2011-03-29 106 views
5

在C#中使用反射時,您需要傳遞稍後投射的參數的對象[],我有一個讓用戶可以輸入參數值的GUI。我知道它們是什麼類型的輸入期望輸入,int,string,float,自定義對象的實例等等......在參數是某種類型的數組int [] foo []的情況下,它允許用戶構造該類型的數組,並添加/刪除元素。創建未知類型的數組。 C#

我不知道的是我如何使用這些信息(我知道數據的類型是類型t)。我怎樣才能構造一個數組t [],這樣,當它給出調用時,它可以轉換爲該數組類型。

例如現在,如果我有一個函數,需要一個整數數組作爲參數,我目前正在傳遞一個對象[]與另一個對象[]裏面充滿了整數,但你不能只是將對象[]轉換爲int [],以便調用失敗。

,因爲它是不可能預測到所有可能的類型也可能是(在加載的DLL定義的其它一些類的實例,例如)我不能寫一個開關的情況下

回答

12

您是否在尋找Array.CreateInstance?如果您只知道動態類型,這很有用。如果你知道它是靜態的,但在一般方法中,你可以使用new T[10]或任何類型參數名稱。

+2

+1 jeez = O問題在'14:29:01Z'被問到,在'14:29:42Z'回答! – gideon 2011-03-29 14:39:44

+0

嗯,我在這裏是新來的,所以我沒有足夠的聲望來誇耀你,但是。這是_exactly_我​​所需要的。非常感謝你! – 2011-03-29 15:58:44

+0

@Steven:每天的這段時間upvote與我無關,但接受感謝,謝謝:) – 2011-03-29 16:01:13

0

這並沒有回答這個問題,但我覺得這可能是值得一提的建議。

如果它是一種可以通過傳遞數組int以及object的數組來調用的方法,那麼似乎您正在實現一種可以用泛型表示的無類型行爲。

我建議使用IEnumerable<T>將其更改爲通用方法。當然,IEnumerable<T>不能通過索引訪問(雖然數組可以),但不知道這是你真正需要的。

結合MakeGenericType,它可以給你你需要的靈活性。