我想在NCalc中覆盖^运算符。目前,它用作按位运算符,我想将其更改为Math.Pow。
这是因为它从习惯于精通样式样式的分析师那里获取输入,并为此使用^。
以上是我的问题。以下是后代的进一步信息:
我当前的方法是在计算之前在输入字符串中手动将“ ^”替换为“ pow”,但这是一个坏主意,原因有几个。检查当前的实现,该实现将一个方程分解为多个离散元素:
private static List<String> ReplacePow(this List<String> input) //called while(input.Contains("^))
{
var index = input.IndexOf("^");
List<String> res = new List<string>();
res.AddRange(input.Take(index - 1));
res.Add("Pow(");
res.Add(input.Skip(index - 1).FirstOrDefault());
res.Add(",");
if(input[index + 1] != "-")
{
res.Add(input.Skip(index + 1).FirstOrDefault());
}
else
{
res.AddRange(input.Skip(index + 1).Take(2));
index++;
}
res.Add(")");
res.AddRange(input.Skip(index + 2));
return res;
}
如您所见,此代码中有一个显式检查,以处理是否将负数传递给Pow()。 而且,如果我需要将一些复杂的输入转换为pow的方程式转换,则此实现将无法正常工作,例如:
5 ^ if(1 == 1,2,-4)