4

我在 ActionScript 中做了很多工作,很高兴看到它与 C# 非常相似,但我缺少一件事,那就是“动态引用”。

例如,动态引用可以使用数组 operator[] 来完成。因此,例如,您还可以通过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# 中的属性?

4

2 回答 2

6

我能看到的唯一方法是使用动态,尤其是ExpandoObject. 通过该ExpandoObject课程,您可以执行以下操作:

dynamic employee;

employee = new ExpandoObject();
employee.Name = "John Smith";
employee.Age = 33;

尽管employee上面没有任何这些属性,但此代码将编译并工作。它不仅可以工作,而且动态属性甚至是强类型的。

按键访问属性也很容易。 ExpandoObjectimplements IDictionary<string,object>,所以它就像一个向下转换一样简单:

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

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

我不建议普遍使用这种方法,但它有时会派上用场。

于 2012-08-05T06:46:23.063 回答
1

C# 中没有eval

关于你问题的第一部分。虽然在 C# 中完全可以遵循

var key = "ouch";
Console.WriteLine(something[key]);

有两件事值得一提。

  1. 这段代码没有什么动态的,至少在动态的 C# 含义中
  2. something不是数组,而是字典。
于 2012-08-05T06:35:00.073 回答