假设我有2个处理程序increment_click和decrement_click,它调用常用方法
实际上我的方法可能要复杂得多,我想避免使用与if一样的语法
if (operator == "+") {
return value = value + step
}
else {
return value = value - step
}
Run Code Online (Sandbox Code Playgroud)
并做一些更通用的事情
increment(value, operator, step) {
return value = value <operator> step
}
Run Code Online (Sandbox Code Playgroud)
它有可能吗?
das*_*ght 11
您可以Dictionary<string,Func<decimal,decimal,decimal>>
使用运算符的实现进行设置,如下所示:
private static readonly IDictionary<string,Func<decimal,decimal,decimal>> ops = new Dictionary<string,Func<decimal,decimal,decimal>> {
{"+", (a,b) => a + b}
, {"-", (a,b) => a - b}
, {"*", (a,b) => a * b}
, {"/", (a,b) => a / b}
};
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
decimal Calculate(string op, decimal a, decimal b) {
return ops[op](a, b);
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以通过以下方式执行此操作Linq.Expressions
:使用C#中定义的预先构建的lambda,而不是使用C#中定义的预先构建的lambda,您可以以编程方式定义lambda,并将其编译为Func<T,T,T>
.