按名称访问动态对象属性

Rez*_*eza 5 .net c# dynamic c#-4.0

我已经创建了这个动态对象,我想按名称访问属性:

dynamic obj = new ExpanadoObject();
obj.Name = "Reza";
Run Code Online (Sandbox Code Playgroud)

我想要的是

obj["Name"] = "Reza";
Run Code Online (Sandbox Code Playgroud)

或者

var name = obj["Name"];
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

das*_*ght 7

检查 的定义ExpandoObject

public sealed class ExpandoObject : IDynamicMetaObjectProvider, 
IDictionary<string,?object>, ICollection<KeyValuePair<string,?object>>, 
IEnumerable<KeyValuePair<string,?object>>, IEnumerable, INotifyPropertyChanged
Run Code Online (Sandbox Code Playgroud)

如您所见,该类实现的接口之一是IDictionary<string,?object>. 因此,你可以这样做:

var dict = (IDictionary<string,?object>)obj;
dict["Name"] = "Reza";
var name = dict["Name"] as string;
Run Code Online (Sandbox Code Playgroud)

请注意,如果您只需要访问字典样式元素的行为,则不需要使用ExpandoObject;一个平原Dictionary<string,object>就可以了。