C# if 函数:从文本文件中获取运算符



是否可以用更改运算符编写 if 语句?

运算符 (<,>, =<;>=, =( 之前已保存在文本文件中,现在在名为 Parameter 的字符串数组中可用。

例如:参数 [0] = {"<"};

代码应如下所示:

if (3 "Parameter[0]" 5) {//do something}

感谢您的帮助!

Dictionary<string, Func<int, int, bool>> functions = ...;
functions.Add("<", (a,b) => a < b);
functions.Add(">", (a,b) => a > b);

然后使用它:

if(functions[Parameter[0]](3, 5)){...}

只是为了完成其他两个答案,您可以返回一个自定义比较器函数:

public Func<int, int, bool> CustomComparer(string parameter) {
switch(parameter) {
case(">="): return (a, b) => a >= b;
case(">"): return (a, b) => a > b;
//...
}
}

并像这样称呼它:

if(CustomComparer("<=")(3, 5)) { ... }

或:

var FirstIsGreater = CustomComparer(">");
if(FirstIsGreater(3, 5)) {... }

如果真的这就是你所需要的。 您可以制作开关大小写:

switch(Operator){
case '<': return a < b;
case '>': return a > b;
...
}

这称为元编程,在 C# 中通常不可用。通常,您无法在任何静态类型语言中执行此操作(在支持元编程的静态类型语言中,"代码字符串"必须在编译时已知(。您可以做的是:

  1. 按照乔尔说的去做,做一个开关盒(尽管如果提取操作员的困难,这可能会变得丑陋(。
  2. 创建一个将运算符映射到函数的
  3. 字典,并创建一个从源字符串中提取运算符的函数(就像 lancew 所做的那样(。
  4. 以编程方式编写可运行的 C# 代码并在运行时编译它(为了上帝的爱,实际上不要仅仅为了比较两个数字而这样做(。

最新更新