找出函数内部使用了哪些变量?

时间:2016-01-05 22:06:08

标签: c# function events dependencies

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

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

e.g。

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);
    }
}

我希望能够以某种方式解决在给定的CalcVar CalcVar函数中使用的其他equation变量,因此我可以计算变量依赖项

我该怎么做呢?当我访问CalcVar RawVal时,我觉得我需要发出一个事件或类似事件,并以某种方式获得有问题的CalcVar订阅这些事件并记录哪些事件触发它致电equation.Invoke()

1 个答案:

答案 0 :(得分:4)

您可能希望CalcVar接受表达式树而不是lambda e.g。

Expression<Func<double>>

而不是

Func<double>

通过这种方式,您可以检查CalcVar中表达式树的主体,并查看依赖项。您可以在这里查看表达式树的介绍:

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