簡體   English   中英

從Type傳遞為參數的方法中實例化對象

[英]Instantiating Object in a method from Type passed as parameter

我試圖將類型傳遞給方法,並使其實例化所述類型的對象。 我有很多重復的代碼,類似於:

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或構造函數來執行所需的操作。

我是反射和泛型的完全入門者,所以我甚至不確定我要問的內容是否可行。 我將對下一步的建議或任何可能的解決方案表示感謝。

反射為此目的而工作

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

我認為您遇到的麻煩是訪問對象屬性(prop?)。編譯器在將其轉換為對象時,不知道您使用的是哪種特定對象類型。

您可以使用以下方法使該工作運行時:

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

但最終這只是將對象強制轉換為特定類的問題:

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

編輯:我可能無法正確理解您的問題。 似乎您也想傳遞不同的類型。 原始類是否具有相同的屬性,還是只想將給定對象的所有屬性添加到列表中?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM