在编译的代码中实现电子表格功能(自动更新变量)

时间:2012-10-27 17:46:11

标签: c# spreadsheet

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

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

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

所以我可以立即依赖所有这些值,而不是必须先编写各种代码才能正确地更新所有变量,这很难做到。

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

编辑: 现在我只是把东西放在循环中并正确地构造所有内容,以便正确更新:

A1 = 2;
B1 = A1 + 2;

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

顺便说一下A1和B1只是随机变量。我没有用单元名称来命名,也没有这样的结构。

1 个答案:

答案 0 :(得分: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问了一个非常相似的问题。)