如何通过名称查找访问对象的属性?

Ine*_*elp 3 c# properties dynamic

我在ActionScript中工作了很多,我很高兴看到它与C#非常相似,但有一点是我缺少的,那就是"动态引用".

例如,可以使用数组运算符[]完成动态引用.因此,您也可以通过some_thing.something_else以下两种方式访问该属性:

some_thing["something_else"]
// or

some_thing[some_var] // where some_var is a variable holding a string
// e.g.: some_var = "something_else";
Run Code Online (Sandbox Code Playgroud)

换句话说,数组语法等同于指定属性本身.

动态引用对象的另一个选项是使用eval()全局函数.

所以,我的问题是:是否可以以类似于ActionScript的方式引用C#中的属性?

nat*_*lez 5

我能看到这样做的唯一方法就是使用动力学,尤其是动力学ExpandoObject.在ExpandoObject课堂上你可以做以下事情:

dynamic employee;

employee = new ExpandoObject();
employee.Name = "John Smith";
employee.Age = 33;
Run Code Online (Sandbox Code Playgroud)

尽管employee没有任何这些属性,这段代码将编译和工作.它不仅可以工作,而且动态属性甚至可以强类型化.

按键访问属性也很容易. ExpandoObject实现IDictionary<string,object>,所以它像一个垂头丧气一样简单:

var dictEmployee = employee as IDictionary<string,object>;
Debug.WriteLine(dictEmployee["Age"].ToString);
Run Code Online (Sandbox Code Playgroud)

此代码将导致33打印到调试输出中.

我不建议普遍使用这种方法,但它偶尔会派上用场.