访问动态对象属性我创造了这个动态对象,我想通过名称来访问属性:按名称
dynamic obj = new ExapnadoObject();
obj.Name = "Reza";
我要的是
obj["Name"] = "Reza";
或
var name = obj["Name"];
我该怎么做?
访问动态对象属性我创造了这个动态对象,我想通过名称来访问属性:按名称
dynamic obj = new ExapnadoObject();
obj.Name = "Reza";
我要的是
obj["Name"] = "Reza";
或
var name = obj["Name"];
我该怎么做?
检查的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>
会做得很好。
ExpandoObject
实现IDictionary<string, object>
,它允许你做这样的事情:
dynamic obj = new ExpandoObject();
IDictionary<string, object> dictionary = obj;
dictionary["Name"] = "Reza";
var name = dictionary["Name"];
尽管你的答案是对的,但是dasblinkenlight更具描述性,我会投票支持你并接受这一点;) – RezaRahmati
'ExapnadoObject'或'ExpandoObject'? – Eser
简单地将它转换为'IDictionary' –