假设我Dictionary
喜欢这个:
Dictionary<string, string> values = new Dictionary<string, string>()
{
{ "Name" , "John Smith"},
{ "Age", "34"}
};
Run Code Online (Sandbox Code Playgroud)
现在我想从该字典创建类型并在运行时使用值初始化它,以便我能够使用反射访问它的属性.
对于这个例子,我想要属性Name
等于"Jon Smith"
和Age
等于的对象34
.
编辑: 我需要这个比较两个对象与语义比较库,如TestApi.由具有强类型的其他代码创建的第一个对象
class Person
{
public string Name {get; set;}
public int Age { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
和其他我需要从其他来源创建像xml文件(但不是必需的).要比较的类型仅在运行时才知道.
Jon*_*eet 10
如果您使用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
Run Code Online (Sandbox Code Playgroud)
编辑:我错过了你想用反射访问数据.使用反射是一种有效地处理类型的方式 - 就像地图一样 - 你已经以这种形式得到了它.为什么不直接访问字典?唯一的好处是,如果您希望能够使用某些类型的反射,而某些类型使用字典.在这种情况下,我将创建一个具有两个实现的通用接口 - 其中一个从字典中获取值,其中一个使用反射.这比在飞行中创建类型要容易得多(这是可能的,但不是很有趣).
归档时间: |
|
查看次数: |
1265 次 |
最近记录: |