如何模拟电子表格单元格所包含数据类型的动态行为
本文关键字:数据类型 包含 动态 单元格 何模拟 模拟 电子表格 | 更新日期: 2023-09-27 17:56:25
如果一个人有一个包含单元格集合的工作表类,那么在 C# 4 中,如何构造单元格,使它们可以包含不同的包装类型(int、bool、string 等),但仍然共存于同一集合中?
如果是像下面这样的东西,
public class Cell<T>
{
T CellValue {get;set;}
}
那么集合需要特定于 T。
我想避免装箱,所以我试图让 CellValue 成为一个对象,因为它可以包含值类型。
我考虑过的另一个选择是,我希望支持从定义 GetAsString()、GetAsInt() 等方法的抽象基础继承每种类型的特定单元格类型,如果类型匹配或转换是可能的,并且只使用可为空的值类型,则返回 null 或值。 然后我必须编写 SetFromString(string val) 等。 这将起作用,因为消费者将始终知道它需要什么类型,但它似乎有点笨拙。
我缺少其他选择吗?
拳击是你最不担心的。 电子表格是一个庞大的项目,即使在最佳设计性能下,也更有可能受到公式和引用等重新计算开销的限制,而不是单元格检索。 但考虑一下是件好事。
如果你真的想做这件事,那么你可能不想使用通用方法,因为这将有利于编译时的安全性,但它只会在运行时创建一个大的switch语句,当你尝试动态做事时。 相反,您可以使用传统的面向对象方法,即基类Cell
和派生NumberCell
和StringCell
类,当然,继续使用object
类型的CellValue
。 您可能还想添加 CellType
属性。 你有很多选择。
此外,传统的面向对象方法允许除了单元格值类型(如公式单元格等)之外添加不同类型的单元格行为。 另一方面,有些人可能只是创建一个Cell
类并将所有内容都塞进去。