3

我需要在我的代码中放置一个位置,当其他变量依赖的变量发生变化时,变量会自动更新。

与电子表格的不同之处在于我不想要所有的解析内容,我只想在代码中完成所有事情,因为我不需要在程序编译后更新公式/变量。

基本上有输入数据,电子表格部分的一些“单元格”将监听这些值、更改,并且更改将通过“电子表格”部分传播。就像一个普通的电子表格。

因此,我可以立即依赖所有这些值,而不必首先编写各种代码来正确更新所有变量,这很难做到。

如果有人可以帮助我实现这一点的思考过程,那真的很有帮助!我一直在阅读一些电子表格源代码,但要理解这一点需要很长时间,然后才能理解我将如何改变这些想法以适应我需要做的事情。

编辑:现在我只是循环中的东西并正确构建所有内容,因此它可以正确更新,如下所示:

A1 = 2;
B1 = A1 + 2;

然后这只是一次又一次地循环。但是,如果我想让事情自动更新,我将如何存储附加到变量的计算?那么在更新 B 时它会调用 A1 + 2 吗?

顺便说一句,A1 和 B1 只是随机变量。我不按单元名称命名事物,也没有这样的结构。

4

1 回答 1

1

存储计算的一种方法是使用 C# 中内置的函数式编程元素。

Func<T1,T2,...TResult>可以使用其中一个委托将公式存储为函数。

var CalculationForX = new Func<double, double, double>( 
    (arg1, arg2) => arg1 * arg2
);

在这里,CalculationForX指定一个接受两个双精度数的函数,并返回两个双精度数的乘积。然后使用例如CalculationForX(5, 2)返回 10。


因此,跟踪所有依赖项的一种直接方法是为每个因变量存储一个对象,其中包含其公式和输入。这些可能是以下形式:

  • 包含给定对象的属性名称的字符串数组
  • 一个PropertyInfo数组
  • Action<T1,T2>委托代表实际的属性设置器

每当您收到属性更改事件时,检索依赖于它的所有变量的计算和输入,并更新目标值。

(你问这个问题对我来说很有趣,因为我昨天在Programmers上问了一个非常相似的问题。)

于 2012-10-27T18:06:59.877 回答