NCalc-覆盖^运算符以充当Math.Pow

时间:2018-09-05 05:56:19

标签: c# text-parsing ncalc

我想在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)

0 个答案:

没有答案