如何投射到动态类?

时间:2012-02-09 00:02:54

标签: c# .net filehelpers

我正在尝试使用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);

DelimitedClassBuilder接收第一个参数“className”然后“delimiter”

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

然后我浏览了流的第一行,其中包含我稍后将用作此“类”的fieldNames的标题。

最后一行读取所有其余信息并将其作为对象数组[]返回。我在里面看到它们属于“临时”类。

但我不知道实际上是如何将它投入到“临时”课程中。现在我真的不知道如何获取数据。我知道我不能做像

这样的事情

result [0] .SomeFieldName作为fieldName可能会从运行更改为运行。所以这也让我想知道为什么如果我不得不做一些像索引或其他东西那样的事情,它首先会成为一个类。

正如你现在所看到的,我很困惑。

1 个答案:

答案 0 :(得分: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();