如何从 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# 编译器,而且它们很容易找到,所以我不打算深入探讨 - 这可能是一个巨大的矫枉过正,并在安全等方面带来很多麻烦。如果你去运行时代码生成,Expressions 可能是安全性和灵活性之间的一个不错的折衷方案。

在更具体的情况下,您确实希望以您想要的方式定义您的操作,这样您就可以完全控制您允许用户执行的操作(无论是实时用户还是某些脚本,都没有区别)。

确实,简单的switch 是解决如此简单问题的最清晰的解决方案。如果您想扩展为成熟的特定领域语言,它的扩展性不好,但它不需要任何特殊知识(例如编译器理论) - 只需做最简单的工作即可。

switch (operator)

  case '+': return op1 + op2;
  case '-': return op1 - op2;
  ...

不要让事情变得比他们需要的更复杂。尤其是在运行时代码生成或评估等方面:)

【讨论】:

以上是关于如何从 char 中获取 + - / *的主要内容,如果未能解决你的问题,请参考以下文章

如何从char *获取pdf文件的最后写入日期(文件在内存中)

如何从非 ascii 字符中获取 char 值

如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]

从 C++ 库方法返回的“char*”获取 C# 字符串?

swift 从字符串中获取char

C#从返回char指针的c++函数中获取字符串/字符值