[英]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.