[英]Storing multiple types in same object
首先,我將提供一些背景信息,因此這個問題並非完全沒有上下文:
我正在編寫一個程序,需要讀取我知道格式/布局的二進制文件。 這些文件的大部分包含“結構”,每個結構的布局存儲在文件的標題中。 每個結構都包含可以是結構或“基本”類型的字段(不是結構,可以是值或引用類型,例如float
或String
或Vector3
)。
我不需要訪問這些文件中的大多數數據,因此我不必為當前項目定義所有可能的結構,但是我必須定義的足夠多的知識是,手動進行將是乏味且耗時的。
我的問題是這些結構的數量非常大(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.