[英]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,你可以使用dynamic
和ExpandoObject
- 它實際上並沒有創建一個新類型,但它在某些情況下足夠接近:
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.