【问题标题】:How can a string be inserted as code at runtime? [duplicate]如何在运行时将字符串作为代码插入? [复制]
【发布时间】:2020-02-22 21:04:15
【问题描述】:

假设我有这个方法:

1. public int sum(int a, int b){
2.     int x = 0;
3. 
4.     return x;
5. }

是否有可能得到一个字符串x = a + b; 并放在第 3 行(在运行时),以便在插入此字符串后,代码现在会计算 ab 的总和?

我想在文本输入字段中编写一些代码,所以当我按下按钮时,所有代码(即字符串)应该能够进入某些现有代码的某些部分。上面的sum 只是一个例子,但它可以是任何东西。

【问题讨论】:

  • 你真的需要编译c#吗?你可以做你自己的解析器。例如,如果你只是想解释一个“代码迷你游戏”的代码。
  • 我不想创建一个完整的解析器,我打算稍作修改并将代码转换为可用的 C#。
  • 看,您的选择是:a) Anu 的答案 b) 将文本代码编译成动态生成的程序集(使用链接问题中接受的答案中提到的 CodeDom)。这里没有真正的中间选项。

标签: c# unity3d


【解决方案1】:

您可以将Func<> 作为参数传递给方法,而不是插入字符串。例如,

public int sum(int a, int b,Func<int,int,int> expression = null)
{
   int x = expression == null ? 0 : expression(a,b);
   return x;
}

现在,您可以使用该方法作为

var result1 = sum(1,2);  // When you do not want to add the numbers
var result2 = sum(1,2,(a,b)=>a+b); // when you want to add the numbers

【讨论】:

  • 我的问题是有原因的:小字符串 x = a + b; 只是一个例子,但我想要一个包含大量代码的字符串,这些代码执行大量操作并将其放入void 运行时的方法。 lambda 表达式不适合,因为我希望用户编写一些代码,然后将其插入到一些现有代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多