我正在用C#编写一个开源工程计算器应用程序。

有一个名为CalcVar的类,它代表一个计算器变量。它们被添加到Calculator类。在构造此CalcVar变量时,将传递“等式” lambda函数(类型为Func<double>,如下所示),该函数的主体可以包含任意数量的CalcVar对象(也属于同一Calculator)类),将它们相乘/相加/相除/相乘,并返回此CalcVar对象的值。

例如

class OhmsLaw : Calculator
{
    CalcVar voltage;
    CalcVar current;
    CalcVar resistance;

    public OhmsLaw() : base("Ohm's Law", "Ohm's law calculator.")
    {
        this.voltage = new CalcVar(() => current.RawVal*resistance.RawVal);

        this.current = new CalcVar(() => voltage.RawVal / resistance.RawVal);

        this.resistance = new CalcVar(() => voltage.RawVal / current.RawVal);
    }
}


我希望能够以某种方式计算出给定CalcVarCalcVar函数中使用了哪些其他equation变量,因此我可以计算出变量的依赖性。

我将如何去做呢?我感觉我需要在访问CalcVarRawVal时发出一个事件或类似事件,并以某种方式使有问题的CalcVar订阅这些事件并记录在调用equation.Invoke()时触发的事件。

最佳答案

您可能希望CalcVar接受表达式树而不是lambda。
例如

Expression<Func<double>>


代替

Func<double>


这样,您可以在CalcVar中检查表达式树的主体并查看相关性。您可以在此处查找表达式树的介绍:

What are Expression Trees and how do you use them and why would you use them?

关于c# - 找出函数内部使用了哪些变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34622074/

10-10 01:50