问题

我可以做一个eval("something()");在JavaScript中动态执行代码.有没有办法让我在C#中做同样的事情?

我想要做的一个例子是:我有一个整数变量(比如i),我有多个属性,名称:“Property1”,“Property2”,“Property3”等. 现在,我想根据i的值在“Propertyi”属性上执行一些操作.

这对Javascript来说非常简单.有没有办法用C#做到这一点?

  最佳答案

不幸的是,C#不是这样的动态语言.

但是,您可以做的是创建一个包含类和所有内容的 C# 源代码文件,并通过 C# 的 CodeDom 提供程序运行它并将其编译成汇编,然后执行它。

MSDN上的这个论坛帖子包含一个答案,在页面下面有些示例代码:
2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表 从字符串创建匿名方法?

我很难说这是一个非常好的解决办法,但无论如何都是可能的。

您将在该字符串中期望什么样的代码?如果它是有效代码的一个小子集,例如只是数学表达式,可能存在其他替代方案.


编辑:好吧,这教我先彻底阅读问题.是的,反思可以在这里给你一些帮助.

如果您将字符串拆分;首先,为了获得个别属性,您可以使用以下代码为类获取特定属性的PropertyInfo对象,然后使用该对象来操作特定对象。

 String propName = "Text";
PropertyInfo pi = someObject.GetType().GetProperty(propName);
pi.SetValue(someObject, "New Value", new Object[0]);
 

链接: PropertyInfo.SetValue Method

  相同标签的其他问题

c#reflectionpropertiesc#-2.0