在同一对象中存储多个类型

时间:2010-07-27 01:00:38

标签: c# types

首先,我将提供一些背景信息,因此这个问题并非完全没有背景:

我正在编写一个程序,需要读取我知道格式/布局的二进制文件。这些文件中的大部分都包含“结构”,每个文件的布局都存储在文件的标题中。每个结构都包含可以是结构或“基础”类型的字段(不是结构体,可以是值或引用类型,如floatStringVector3)。

我不需要访问这些文件中的大部分数据,因此我不必为我当前的项目定义所有可能的结构,但是我必须定义手动执行它会很乏味耗时。

我的问题是这些结构数量非常多(2500多个不同的结构,尽管只有文件中出现的结构在该文件的标题中定义)。我希望能够以一种使所有数据以相同方式可用的方式读取它们,而无需手动定义每个数据。我目前的想法是我应该创建一个这样的类:


class Struct{
  StructDefinition _def;
  List < Field > _fields;
  ...
}

在字段类中,我需要能够存储结构和基类型(或更重要的是参考和值类型)。有没有办法做到这一点,而不是把所有东西变成object,然后在我需要的时候把它变成正确的类型?另外,这是阅读这些文件的最佳方式,还是有更好的方法?

2 个答案:

答案 0 :(得分:0)

如果定义一个包含操作字段所需的所有方法的接口,则可以创建一小组对象 - 一个用于引用,另一个用于值类型。
只要每个对象实现相同的接口,您就可以一般地使用它们。

答案 1 :(得分:0)

dynamic(.NET 4.0)可以在运行时执行此操作,但是会丢失编译时类型安全性和IntelliSense。

对于您的特定情况,我建议使用.NET 4.0中的新文件映射类。

如果您需要预先的.NET 4.0解决方案,请考虑将该文件视为一系列偏移而不是结构,并使用FileStream,仅搜索和读取您需要的信息。这有点像穷人的文件映射。请注意,在这种情况下,如果只是向前移动文件,它会更有效。

使用这两种解决方案中的任何一种,您都不必浪费时间和内存读取数据,无论如何都不需要。