如何从 char 中获取 + - / *
Posted
技术标签:
【中文标题】如何从 char 中获取 + - / *【英文标题】:How to get the + - / * from char 【发布时间】:2018-09-12 14:08:48 【问题描述】:我知道如何在 C# int g += 5;
中使用这种语法
如果我有 char h = '+';
类似于 g h= 5;
,我该如何做同样的事情
或var j = Convert.ToSymbol(h)
和g j= 5;
之后
如果不使用switch case
【问题讨论】:
您不能在表达式中插入char
,因为您不会将表达式构建为字符串。相反,您可以尝试做一个基于参数h
返回不同结果的函数,即if (h == '+') return g + 5; else if (h == '-') return g - 5; //etc
您需要稍微改进一下您的问题。 switch
怎么了?尝试为您的限制添加原因。
只是为了能够写出更短的代码,我没有插入所有代码来轻松理解我想要的内容
所以你的目标是写出不可读的代码?
【参考方案1】:
C# 没有在运行时处理符号的内置方法。并非所有语言都有 LISP :)
在一般情况下,您谈论的是编译器 - 将代码作为输入并生成可执行文件的东西。有很多方法可以在 C# 中调用 C# 编译器,而且它们很容易找到,所以我不打算深入探讨 - 这可能是一个巨大的矫枉过正,并在安全等方面带来很多麻烦。如果你去运行时代码生成,Expression
s 可能是安全性和灵活性之间的一个不错的折衷方案。
在更具体的情况下,您确实希望以您想要的方式定义您的操作,这样您就可以完全控制您允许用户执行的操作(无论是实时用户还是某些脚本,都没有区别)。
确实,简单的switch
是解决如此简单问题的最清晰的解决方案。如果您想扩展为成熟的特定领域语言,它的扩展性不好,但它不需要任何特殊知识(例如编译器理论) - 只需做最简单的工作即可。
switch (operator)
case '+': return op1 + op2;
case '-': return op1 - op2;
...
不要让事情变得比他们需要的更复杂。尤其是在运行时代码生成或评估等方面:)
【讨论】:
以上是关于如何从 char 中获取 + - / *的主要内容,如果未能解决你的问题,请参考以下文章
如何从char *获取pdf文件的最后写入日期(文件在内存中)