我知道如何在C#int g += 5;
中使用此语法
如果我有h = '+';
种g h= 5;
的话,我该如何做同样的事情
或var j = Convert.ToSymbol(h)
以及g j= 5;
如果不使用开关案例
答案 0 :(得分:2)
C#在运行时没有内置的处理符号的方法。不是每种语言都有LISP :)
在一般情况下,您正在谈论编译器 - 将代码作为输入并生成可执行文件的东西。有很多方法可以在C#中调用C#编译器,并且它们很容易找到,所以我不会深入研究它 - 它可能是一个巨大的矫枉过正,并提出许多安全问题。如果你完全使用运行时代码生成,Expression
可能是安全性和灵活性之间的妥协。
在更具体的情况下,您确实希望以您希望的方式定义您的操作,这使您可以完全控制您允许用户的操作(无论是实时用户还是某些脚本,没有区别)。
事实上,对于像这样简单的事情,简单的switch
是最清晰的解决方案。如果你想扩展到一个完整的领域特定语言,它不能很好地扩展,但它不需要任何特殊的知识(例如编译器理论) - 只做最简单的工作。
switch (operator)
{
case '+': return op1 + op2;
case '-': return op1 - op2;
...
}
不要让事情变得比他们需要的更复杂。特别是在运行时代码生成或评估等方面:)