【问题标题】:How to get the + - / * from char如何从 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 怎么了?尝试为您的限制添加原因。
  • 只是为了能够写出更短的代码,我没有插入所有代码来轻松理解我想要的内容
  • 所以你的目标是写出不可读的代码?

标签: c# visual-studio char symbols


【解决方案1】:

C# 没有在运行时处理符号的内置方法。并非所有语言都有 LISP :)

在一般情况下,您谈论的是编译器 - 将代码作为输入并生成可执行文件的东西。有很多方法可以在 C# 中调用 C# 编译器,而且它们很容易找到,所以我不打算深入探讨 - 这可能是一个巨大的矫枉过正,并在安全等方面带来很多麻烦。如果你去运行时代码生成,Expressions 可能是安全性和灵活性之间的一个不错的折衷方案。

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

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

switch (operator)
{
  case '+': return op1 + op2;
  case '-': return op1 - op2;
  ...
}

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

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多