我在ActionScript中做了很多工作,我很高兴看到它与C#非常相似,但有一件事我没有,那就是"动态引用&#34 ;
例如,可以使用数组运算符[]完成动态引用。因此,您也可以通过以下两种方式访问属性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";
换句话说,数组语法等同于指定属性本身。
动态引用对象的另一个选项是使用eval()全局函数。
所以,我的问题:是否可以以类似于ActionScript的方式引用C#中的属性?
答案 0 :(得分:5)
我能看到的唯一方法是使用动态,特别是ExpandoObject
。使用ExpandoObject
课程,您可以执行以下操作:
dynamic employee;
employee = new ExpandoObject();
employee.Name = "John Smith";
employee.Age = 33;
尽管employee
没有任何这些属性,但这段代码将编译并运行。它不仅可以工作,而且动态属性甚至可以强类型化。
按键访问属性也很容易。 ExpandoObject
实现IDictionary<string,object>
,因此它就像向下转发一样简单:
var dictEmployee = employee as IDictionary<string,object>;
Debug.WriteLine(dictEmployee["Age"].ToString);
此代码将导致33
被打印到调试输出中。
我不建议普遍使用这种方法,但它偶尔会派上用场。
答案 1 :(得分:1)
C#中没有eval
。
关于问题的第一部分。虽然C#
完全可以完成var key = "ouch";
Console.WriteLine(something[key]);
有两件事值得一提。
something
不是数组,而是字典。