Как привести в динамический класс? - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь использовать 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 для этого «класса».

Последняя строка считывает всю остальную информацию и возвращает ее в виде массива объектов []. Внутри я вижу, что они класса "temp".

Пока я не знаю, как на самом деле привести его к классу "temp". Прямо сейчас я не знаю, как получить данные. Я знаю, что не могу просто сделать что-то вроде

результат [0] .SomeFieldName, поскольку fieldName может меняться от запуска к запуску. Так что это также заставляет меня задаться вопросом, почему это делает класс в первую очередь, если я собираюсь сделать что-то вроде получения по индексу или что-то еще.

Как вы можете видеть прямо сейчас, я очень смущен.

1 Ответ

0 голосов
/ 09 февраля 2012

Самый простой способ продемонстрирован в примерах .

Вы используете

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