[英]How do I create an instance from a string in C#?
我正在從XML中讀取信息,其中包含我需要實例化的對象類型及其構造函數參數。
對象類型實際上位於兄弟命名空間內的另一個項目中。 (我需要在Company.Project1類中創建一個Company.Project2.Type。)
我發現了這個問題 ,但它沒有處理構造函數參數或它在另一個命名空間中的事實。
我怎樣才能做到這一點?
編輯:項目屬性中未正確設置程序集名稱和默認名稱空間。
Type.GetType()
指定完整的類型名稱,包括名稱空間,例如“Company.Project2.Type” Company.Project2.dll
,您可以指定“Company.Project2.Type,Company.Project2”。 Activator.CreateInstance(Type, Object[])
或使用Type.GetConstructor()
獲取所需的確切構造函數,然后調用ConstructorInfo.Invoke()
。 如果這沒有幫助,請提供更多信息。
如果要在運行時動態創建類型,Activator.CreateInstance方法將為您完成。 如果發出的是具有帶參數的構造函數的類型,則此重載將執行此操作。 例如, http://msdn.microsoft.com/en-us/library/wcxyzt4d.aspx
我建議通過重載來尋找最佳匹配。
命名空間問題應該不是相關的 - 只要dll在bin目錄或GAC中就可以了。 如果程序集名稱很強,則規則可能會更改。
你能提供代碼的代碼片段(使用你鏈接的方法)嗎? 這+你看到的錯誤將非常有幫助! [更新]使用處理具有參數的構造函數的Activator.CreateInstance的快速示例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
BaseProduct b =(BaseProduct)System.Activator.CreateInstance(Type.GetType("ConsoleApplication1.Product")
,new object[]{typeof(string)},
new object[]{"123"}
);
//Activator..::.CreateInstance Method (Type, array<Object>[]()[], array<Object>[]()[])
}
}
public class Product: BaseProduct{
public Product(string id) {
}
public string Id {get;set;}
}
public abstract class BaseProduct {
abstract public string Id { get; set; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.