2015-10-13 69 views
0

我試圖將類型傳遞給方法,並讓它實例化所述類型的對象。我有很多重複的代碼類似於:在作爲參數傳入的類型中實例化對象

foreach (Link link in links) 
{ 
    Object obj = new Object(link); 
    list.Add("Description" + obj.prop.ToString()); 
} 

隨着衆多不同的類/對象。

我設想:

private void populateList(List<Link> links, Type type, List<val> list, string desc) 
{ 
    foreach (Link link in links) 
    { 
     //Instantiate Object from type parameter here? 
     list.Add(desc + obj.prop.ToString()); 
    } 
} 

我嘗試使用泛型和思考來解決問題:

Type[] typeArgs = {typeof(Link)}; 
Type constructed = type.MakeGenericType(typeArgs); 
object o = Activator.CreateInstance(constructed); 

但我不太清楚下一步去哪裏因爲我不能使用o或構建來做我需要的。

我是一個完整的初學者與反射和泛型,所以我甚至不知道如果我問的是可能的。我很感激任何關於下一步行動或任何潛在解決方案的建議。

+2

'prop'是什麼? –

+1

哪個是泛型?鏈接? –

+0

@Dave Zych從文本框/下拉列表中拉取文本。一旦我遍歷了所有的對象,我使用所產生的道具列表填充報告。 – mike

回答

1

工作的反思爲此,

public static T GenerateNewInstance<T>(T obj) where T : class 
{ 
    Type type = typeof (T); 
    object instance = Activator.CreateInstance(type); 
    return instance as T; 
} 

我覺得你有與被訪問對象的屬性什麼麻煩(丙?)編譯器不知道你用的什麼地方努力特定對象類型它被當作一個對象來投射。

你可以使用類似的,使這項工作運行時間:

obj.GetType().GetRuntimeProperty("PropertyName").GetValue(obj); 

但最終它的鑄造對象爲特定類的問題:

class obj = (class)obj; 
list.Add(obj.property.ToString()); 

編輯:我可能不明白你的問題正確。 它也好像你想通過不同類型的。原始類是否具有相同的屬性,或者只是想將給定對象的所有屬性添加到列表中?

如果它們具有相同的屬性,請考慮創建一個與這些屬性的接口並使您的類實現它,這樣您就可以創建對象的新實例並將其作爲接口進行轉換,從而獲得它們共享的屬性。

+0

不,對不起,原來的類都有不同的屬性。我應該在這個問題中提到,每個類型基本上都是一個輸入表單,並且這些屬性字段是表單中的輸入字段,例如文本字段,下拉框等。 – mike

相關問題