是否可以用更改运算符编写 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# 中通常不可用。通常,您无法在任何静态类型语言中执行此操作(在支持元编程的静态类型语言中,"代码字符串"必须在编译时已知(。您可以做的是:
- 按照乔尔说的去做,做一个开关盒(尽管如果提取操作员的困难,这可能会变得丑陋(。 创建一个将运算符映射到函数的
- 字典,并创建一个从源字符串中提取运算符的函数(就像 lancew 所做的那样(。
- 以编程方式编写可运行的 C# 代码并在运行时编译它(为了上帝的爱,实际上不要仅仅为了比较两个数字而这样做(。