c# - 将字符串解析为 Unity3D 中的代码 (C#)

标签 c# string parsing unity3d

所以我想在 Unity 中构建这个小型代码沙箱,这样我就可以向学生教授算法和编码的基础知识。

他们的想法是让他们在文本框或类似的东西中输入(非常基本的)代码,然后观察他们的代码对 Unity 场景中存在的对象的影响。我很确定这已经完成了一百万次,但我很想尝试一下。问题是,我不知道从哪里开始......

我想这个想法是将字符串编译成代码并在运行时按一个按钮执行。

我已经阅读了许多关于 SO 的其他问题,并提出了非常多样化的解决方案,例如使用 C# 解析器、反射、表达式树、CodeDom 等。

根据我对所有这些的理解(即不多),CodeDom 似乎更合适,但后来我读到它只在 Visual Studio 内部运行并在公共(public)构建中产生错误。那么这是否意味着这将成为 Unity3D 中的一个问题(因为它基于 Mono?)

谢谢你的帮助,

最佳答案

在以下情况下,您在同一脚本中查找给定名称的现有方法(您可以轻松地将其转换为另一个脚本或程序集中的任何脚本(尽管不推荐)):

string actionStr = inputField.text;
Type t = this.GetType();
MethodInfo mi = t.GetMethod(actionStr);
if(mi == null)
{
     ErrorMethod(actionStr + " method could not be found");
}else
{
    mi.Invoke(this);
}

另一种方法是将所有方法存储在字典中(更快):

Dictionary<string, Action>dict = null;
void Start()
{
      this.dict = new Dictionary<string, Action>();
      this.dict.Add("dosomething", DoSomething);
}
void DoSomething(){}

public void OnActionCall(string inputFieldStr)
{
    string str = inputFieldStr.ToLower();
    if(this.dict.Contains(str) == false)
    { 
         ErrorMethod(actionStr + " method could not be found");
         return; 
    }
    this.dict[str]();
}

关于c# - 将字符串解析为 Unity3D 中的代码 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41779776/

相关文章:

c# - COM 可见 C# 类库中的 ADO.NET Entity Framework

c# - CancellationToken 的默认参数

c++ - 流内容与返回字符串 `str()` 的区别?

c# - 非mshtml c#解析html和javascript

xml - 没有 XML 模式的单 channel EDI 解析 - 可能吗?

javascript - 使用 getJSON 获取 json 数据

c# - 无法通过具有两个属性的 Xpath 选择 XmlNode

c# - ReaderWriterLockSlim 阻塞读取,直到所有排队的写入完成

java - 在Java中将ASCII字符串解析和处理为二进制是否有优势?

java - 不拆分单词的最长公共(public)子串