一尘不染

如何动态评估C#代码?

c#

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

我要尝试执行的一个示例是:我有一个整数变量(例如i),并且具有多个属性,它们的名称分别为:“ Property1”,“ Property2”,“
Property3”等。现在,我想执行一些操作在“ Property i ”属性上取决于值i

使用Javascript确实很简单。有什么办法用C#做到这一点?


阅读 186

收藏
2020-05-19

共1个答案

一尘不染

不幸的是,C#不是那样的动态语言。

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

MSDN上的该论坛帖子在页面下方包含一些示例代码的答案:
从字符串创建匿名方法?

我很难说这是一个很好的解决方案,但是还是有可能的。

您期望在该字符串中使用哪种代码?如果它是有效代码的次要子集,例如数学表达式,则可能存在其他替代方法。


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

如果将字符串除以; 首先,要获取单个属性,可以使用以下代码为类的特定属性获取PropertyInfo对象,然后使用该对象来操纵特定对象。

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

链接:PropertyInfo.SetValue方法

2020-05-19