我使用FileHelpers解析CSV文件,其結構是未知的使用下面的代碼:如何訪問在運行時定義類型的對象?
string cd = string.Format(@"[DelimitedRecord(""{0}"")]
public sealed class ImportClass {{
[FieldQuoted('{1}')]
public string[] Fields;
}}", _delimiter, _quote);
Type t = DelimitedClassBuilder.ClassFromString(cd);
var engine = new FileHelperAsyncEngine(t);
engine.BeginReadFile(filename);
object record;
while ((record = engine.ReadNext()) != null) {
}
engine.Close();
這似乎工作得很好。當我用調試器遍歷它時,record是一個ImportClass類型的對象,而Fields字段正確地填充了來自該文件的數據。
我遇到的問題是我如何實際提取數據?我無法將記錄轉換爲ImportClass,因爲該類型在編譯時未知。我真的需要使用反射還是有更簡單的方法來做到這一點?
這是一個小改動。由於我使用字段而不是屬性,我需要使用FieldInfo和GetField()。 – Ferruccio 2010-02-11 05:38:04
我正在處理的一些文件可能變得非常大,我寧願在內存中沒有兩個副本(DataTable +我的數據結構)。然而,看DataTable讓我覺得用它來存儲數據可能更合適。所以我最終可能會重構使用DataTable,並能夠使用更簡單的解決方案。 – Ferruccio 2010-02-11 05:52:02