2012-02-09 15 views
0

私はfilehelpersクラスビルダーを使用しようとしていますが、私はちょっとそれをどうするのか混乱しています。ダイナミッククラスにキャストする方法は?

 var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," }; 
     var sr = new StreamReader(stream); 
     var headerArray = sr.ReadLine().Split(','); 
     foreach (var header in headerArray) 
     { 
      var fieldName = header.Replace("\"", "").Replace(" ", ""); 
      cb.AddField(fieldName, typeof(string)); 
     } 

     var engine = new FileHelperEngine(cb.CreateRecordClass()); 
     var result = engine.ReadStream(sr); 

それは私がその後、私が後で意志のヘッダーが含まれているものを、ストリームの最初の行を経る「その後、className」のおよび 『最初のパラメータの区切り文字』

// 
    // Summary: 
    //  Creates a new DelimitedClassBuilder. 
    // 
    // Parameters: 
    // className: 
    //  The valid class name. 
    // 
    // delimiter: 
    //  The delimiter for that class. 
    public DelimitedClassBuilder(string className, string delimiter); 

だとしてDelimitedClassBuilderがでとりますこの「クラス」のフィールド名として使用します。

最後の行は、私は、彼らがクラス「TEMP」であることの内部を見る。

。[]の情報のすべての残りを読み込み、オブジェクト配列として返します

しかし、実際にクラス「temp」にどのように実際にキャストしているのか分かりません。今はデータをどうやって入手するのか分かりません。

結果[0]。フィールド名としてのSomeFieldNameは実行ごとに変わる可能性があります。だから、これは私が索引などでそれを得るような何かをしなければならない場合、最初のクラスでなぜクラスを作るのか不思議に思う。

あなたが今見ているとおり、私は非常に混乱しています。

+2

キャストを使用すると、コンパイラが推測できないことをコンパイル時の知識があることを意味します。不明なものにキャストする必要がある場合は、インターフェイスまたは継承を使用して共通ロジックを統一するようにデザインを変更する必要があります。 – paislee

+0

どの.NET Frameworkのバージョンを使用していますか? –

+0

4.0(必要に応じてダイナミックを使用できます)私はそれがクラスを作るという事実だけではまだ混乱していますが、私はこのランタイム生成クラスをどうするべきか理解していません。 – chobo2

答えて

0

最も簡単な方法は、in the examplesです。あなたは

DataTable dt = engine.ReadStreamAsDT(sr); 

を使用し、その後のようなもので、結果をアクセス

foreach (DataRow row in dt.Rows) // Loop over the rows. 
{ 
    Console.WriteLine("--- Row ---"); // Print separator. 
    foreach (var item in row.ItemArray) // Loop over the columns. 
    { 
     Console.Write("Item: "); // Print label. 
     Console.WriteLine(item); 
     /// the Type of item will be whatever you defined when you 
     /// called ClassBuilder.AddField() (String in your example) 
    } 
} 
Console.ReadLine(); 
関連する問題