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

标签 c# spreadsheet

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

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

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

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

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

编辑: 现在我只是让事情循环并正确构造所有内容,以便它像这样正确更新:

A1 = 2;
B1 = A1 + 2;

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

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

最佳答案

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

可以使用 Func<T1,T2,...TResult> 之一将公式存储为函数代表们。

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

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


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

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

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

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

关于c# - 在编译代码中实现电子表格功能(自动更新变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102582/

相关文章:

regex - 通过 Google Sheets 正则表达式提取根域

objective-c - 在 iOS 中从文本文件创建对象的最有效方法

c# - AxWindowsMediaPlayer 的帧调用

c# - 如何获得计数?

c# - 一键关闭两个表单?

google-sheets - 按周、月汇总结果以使用工作表绘图

file - 填充 VBA 的最佳方法

c# - 如何通过 lambda 从列表中获取一种类型的 child ?

c# - 表达式中的 StartsWith 返回 null

date - ColdFusion 电子表格错误,日期或时间字符串无效