簡體   English   中英

在同一個對象中存儲多種類型

[英]Storing multiple types in same object

首先,我將提供一些背景信息,因此這個問題並非完全沒有上下文:

我正在編寫一個程序,需要讀取我知道格式/布局的二進制文件。 這些文件的大部分包含“結構”,每個結構的布局存儲在文件的標題中。 每個結構都包含可以是結構或“基本”類型的字段(不是結構,可以是值或引用類型,例如floatStringVector3 )。

我不需要訪問這些文件中的大多數數據,因此我不必為當前項目定義所有可能的結構,但是我必須定義的足夠多的知識是,手動進行將是乏味且耗時的。

我的問題是這些結構的數量非常大(2500多個不同的結構,盡管僅在文件的頭中定義了出現在文件中的結構)。 我希望能夠以一種使所有數據以相同方式可用的方式讀入它們,而不必手動定義它們。 我目前的想法是,我應該創建一個像這樣的類:


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

在字段類中,我將需要能夠存儲結構和基本類型(或更重要的是引用和值類型)。 有沒有一種方法可以將所有內容都變成一個object然后在需要時將其轉換為正確的類型? 另外,這是讀取這些文件的最佳方法,還是有更好的方法?

如果定義的接口包含操作字段所需的所有方法,則可以創建一小組對象-一個用於引用,一個用於值類型。
只要這些對象中的每一個實現相同的接口,您就可以通用地使用它們。

dynamic (.NET 4.0)可以在運行時執行此操作,但是會丟失編譯時類型的安全性和IntelliSense。

對於您的特定情況,我建議在.NET 4.0中使用新的文件映射類。

如果需要.NET 4.0之前的解決方案,請考慮將文件視為一系列偏移而不是結構,並使用FileStream ,以查找並僅讀取所需的信息。 這有點像窮人的文件映射。 請注意,在這種情況下,如果僅向前瀏覽文件,則性能會更高。

使用最后兩種解決方案中的任何一種,您都不必浪費時間和內存來讀取根本不需要的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM