簡體   English   中英

創建類型並在運行時初始化它

[英]Create type and initialize it at run-time

假設我有這樣的Dictionary

Dictionary<string, string> values = new Dictionary<string, string>()
        {
            { "Name" , "John Smith"},
            { "Age", "34"}
        };

現在我想從該字典創建類型並在運行時使用值初始化它,以便我能夠使用反射訪問它的屬性。

對於這個例子,我希望對象的屬性Name等於"Jon Smith"Age等於34

編輯:我需要這個比較兩個對象與語義比較庫,如TestApi 由具有強類型的其他代碼創建的第一個對象

class Person 
{
    public string Name {get; set;}
    public int Age { get; set;}
} 

和其他我需要從其他來源創建像xml文件(但不是必需的)。 要比較的類型僅在運行時才知道。

如果你正在使用C#4,你可以使用dynamicExpandoObject - 它實際上並沒有創建一個新類型,但它在某些情況下足夠接近:

IDictionary<string, object> foo = new ExpandoObject();
foreach (var pair in values)
{
    foo[pair.Key] = pair.Value;
}

dynamic d = foo;
string name = d.Name;
string age = d.Age; // This will still be a string, not an int

編輯:我錯過了你想用反射訪問數據。 使用反射是一種有效地處理類型的方式 - 就像地圖一樣 - 你已經以這種形式得到了它。 為什么不直接訪問字典? 唯一的好處是,如果您希望能夠使用某些類型的反射,而某些類型使用字典。 在這種情況下,我將創建一個具有兩個實現的通用接口 - 其中一個從字典中獲取值,其中一個使用反射。 這比在飛行中創建類型要容易得多(這是可能的,但不是很有趣)。

暫無
暫無

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

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