2016-03-15 62 views
1

访问动态对象属性我创造了这个动态对象,我想通过名称来访问属性:按名称

dynamic obj = new ExapnadoObject(); 
obj.Name = "Reza"; 

我要的是

obj["Name"] = "Reza"; 

var name = obj["Name"]; 

我该怎么做?

+2

'ExapnadoObject'或'ExpandoObject'? – Eser

+0

简单地将它转换为'IDictionary ' –

回答

3

检查的ExpandoObject定义:

public sealed class ExpandoObject : IDynamicMetaObjectProvider, 
IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, 
IEnumerable<KeyValuePair<string, object>>, IEnumerable, INotifyPropertyChanged 

正如你所看到的,实现的接口之一由班级是IDictionary<string, object>。因此,你可以这样做:

var dict = (IDictionary<string, object>)obj; 
dict["Name"] = "Reza"; 
var name = dict["Name"] as string; 

请注意,如果你需要的是行为,您访问元素字典风格,采用ExpandoObject是没有必要的;一个普通的Dictionary<string,object>会做得很好。

2

ExpandoObject实现IDictionary<string, object>,它允许你做这样的事情:

dynamic obj = new ExpandoObject(); 

IDictionary<string, object> dictionary = obj; 

dictionary["Name"] = "Reza"; 

var name = dictionary["Name"]; 
+0

尽管你的答案是对的,但是dasblinkenlight更具描述性,我会投票支持你并接受这一点;) – RezaRahmati