2011-04-29 69 views
0

我有一個字典對象,其中是字符串類型和是類型的對象,因爲它們是從一個文件,其中所述數據類型中提取(專欄)可能會有所不同。鑄造元件通過在C#中使用反射

Dictionary<string, object[]> lfileContent; 

我想獲得每個數組的類型和鑄造類型。當然,我不能在「詞典」中使用它,但是當我提取每個以使用它們時。舉例來說(我用用邏輯方法的僞C#):

ltype = lfileContent["key1"].Value.GetType(); 
ltype newarray = (ltype) fileContent["key1"].Value; 

我想提出三個問題:

1)當我從文件中的元素,並將它們存儲爲對象 ,他們會保留反射用來獲取其類型的信息嗎?

2)如果(1)不適用,當我從文件中提取它們時(在插入字典中的對象之前)我應該使用反射來獲取它們的類型嗎?

3)我怎樣才能通過使用反射進行這樣的鑄造?

感謝

弗朗西斯

+3

如何將一個對象轉換爲在編譯時不知道的類型有意義? – 2011-04-29 15:02:21

+0

@Kirk Woll - 我唯一能想到的就是他想要智能感知或者物品上的東西;對於運行時類型來說幾乎不可能。 @Francesco;對象已經是它們的類型;你不需要施放它們。 – Tejs 2011-04-29 15:04:16

+0

@Tejs:謝謝你的回答。因爲我從Excel文件中獲取數據,所以投射類型是有意義的。在Excel文件中,第一行代表字典鍵,每列代表字典值(T類型的數組)。我不提前知道這種類型,因爲我不能保證Excel中的數據總是相同的(我只知道第一行= Keys others =值) – CiccioMiami 2011-05-01 10:33:18

回答

0

你並不需要反思,但對象將保留類型信息。爲了將對象轉換爲類型,必須在編譯時告訴它哪種類型,可以使用Reflection來動態操作該對象,但這與將其轉換爲類型不同。我會用這樣的東西:

string[] stringArray = fileContent["Key1"].Value as string[]; 
if (stringArray != null) { 
    // the object is a string[] type, it is safe to use the stringArray variable 
} 

// and continue for other types that may be stored in the dictionary 
+0

感謝您的答案。因此,如果我有N種類型可能,建議我使用N個案例的Switch構造? – CiccioMiami 2011-05-01 10:35:10