如何模拟电子表格单元格中包含的数据类型的动态行为

时间:2011-05-12 03:52:16

标签: c# generics types

如果有一个包含一组单元格的工作表类,在C#4中如何构造单元格,使它们可以包含不同的包装类型(int,bool,string等),但仍然是co - 存在于同一个系列中?

如果是以下内容,

public class Cell<T>
{
    T CellValue {get;set;}
}

然后该集合需要特定于T。

我想避免装箱,所以我试图让CellValue成为一个对象,因为它可以包含值类型。

我考虑过的另一个选项是为每个类型提供特定的单元格类型,我希望支持从定义GetAsString(),GetAsInt()等方法的抽象基类继承,这些方法将返回null或值,如果类型匹配或转换是可能的,只需使用可空值类型。然后我必须编写SetFromString(字符串val)等。这将起作用,因为消费者将始终知道它需要什么类型,但它似乎有点笨重。

我还缺少另一种选择吗?

1 个答案:

答案 0 :(得分:0)

拳击是你最不担心的事情。电子表格是一个巨大的项目,即使在最佳设计性能中,也更有可能受到公式和引用等重新计算开销的限制,而不是细胞检索。但是考虑它是件好事。

如果您真的想要做这件事,那么您可能不希望采用通用方法,因为这会使编译时安全性受益,但它只会在您尝试时在运行时创建一个大的switch语句动态地做事。相反,您可以使用基类Cell和派生NumberCellStringCell类的传统面向对象方法,确保继续使用CellValue类型object。您可能还想添加CellType属性。你有很多选择。

此外,除了细胞值类型(如公式细胞等)之外,传统的面向对象方法还允许添加不同类型的细胞行为。另一方面有些人可能只创建一个Cell类并将所有内容塞入其中。