C# 如何转换为动态类?

C# 如何转换为动态类?,c#,.net,filehelpers,C#,.net,Filehelpers,我正在尝试使用类生成器,但我对如何使用它有点困惑 var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," }; var sr = new StreamReader(stream); var headerArray = sr.ReadLine().Split(',');

我正在尝试使用类生成器,但我对如何使用它有点困惑

       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”,然后是“delimiter”

然后我浏览流的第一行,其中包含标题,稍后我将使用标题作为这个“类”的字段名

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

但我不知道如何将它转换为类“temp”。现在我真的不知道如何获取数据。我知道我不能像这样做

结果[0]。作为字段名的SomeFieldName可以在不同的运行中更改。因此,这也让我想知道,如果我必须执行诸如通过索引获取类之类的操作,为什么它首先会生成一个类


正如你现在看到的,我非常困惑。

最简单的方法就是演示

你用

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();

强制转换意味着您拥有编译器无法推断的编译时知识。如果您需要强制转换到未知的内容,您应该更改设计以使用接口或继承来统一公共逻辑。您使用的是.NET framework的哪个版本?4.0(因此,如果需要,我可以使用动态).我只是被这样一个事实弄糊涂了:它构成了一个类,但我不知道这个运行时生成的类该做什么。
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();