2013-03-15 41 views
0

我在這裏遇到問題。 (C#)將其轉換爲僅在運行時通過其字符串名稱知道的類型。 C#

在另一個程序集中存在一個集合(我無法更改它),它將一個字符串作爲參數並返回一個對象。

喜歡:

object Value = ThatCollection.GetValue("ParameterName"); 

的問題是,對於每個參數的字符串,它返回一個不同類型的對象。 我想要的是將這些對象轉換爲它們各自的類型,僅在運行時才知道它們的字符串名稱。

我需要做一些操作與那些返回的值。 而且爲了訪問他們的成員等,我需要正確地施放它們。

限制:

  • ,因爲我的代碼需要我不能使用「動態」在舊的框架來完成:3.5(因爲互操作性問題)。
  • 我需要使用MANY返回的不同類型的值進行操作(當然沒有公共接口和基類,當然除了「object」)
  • 我只有一個表(包含字符串值)將參數名與他們返回的類型。
  • 是的,我可以將該錶轉換成biiig「switch」語句,不是很好,不想要。

任何提示?

回答

0

你想看看反射,類似下面應該努力對象轉換型T.建立一個簡單的投法:

public static T CastToType<T>(object o) 
    { 
     return (T)o; 
    } 

調用此使用反射:

Type t = Type.GetType(stringName) 
    MethodInfo castTypeMethod = this.GetType().GetMethod("CastToType").MakeGenericMethod(t); 
    object castedObject = castTypeMethod .Invoke(null, new object[] { obj }); 
+0

這很有趣。但是由於結果仍然是「客體」,所以我陷入了同一個觀點。我需要的對象已經是我想要的類型,但是作爲對象。我試圖找出一種明確的類型,我相信我不能逃避「開關」。 – 2013-03-15 20:00:34

+0

我可以通過反射獲得運算符(不只是方法)嗎? – 2013-03-15 20:02:27

+0

我不認爲有沒有一種好的方法可以在沒有開關的情況下做你想做的事情,在某些時候你需要知道你正在處理的類型與它進行交互。 – 2013-03-15 21:45:31

相關問題