Библиотека FileHelpers: ошибка компиляции AfterReadRecord

Я надеюсь, что здесь есть эксперт по использованию библиотеки FileHelpers.

Я использую стабильную версию 2.9.9 от Nuget и пытаюсь использовать обработчик событий AfterReadRecord, чтобы проверить, пусты ли поля.

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

public class Test
{
 public class MyClass
 {
  public string Name;
 }

 public static void engine_AfterReadRecord(EngineBase engine, FileHelpers.Events.AfterReadEventArgs<MyClass> e)
 {
  if (String.IsNullOrWhiteSpace(e.Record.Name))
  {
   throw new InvalidDataException("Name is required");
  }
 }

 public void ReadCSV()
 {
  FileHelperEngine engine = new FileHelperEngine(typeof(MyClass));
  engine.Options.IgnoreFirstLines = 1;
  engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
  engine.AfterReadRecord += new FileHelpers.Events.AfterReadHandler<MyClass>(engine_AfterReadRecord);
 }
}

В последней строке файла ReadCSV есть ошибка компиляции. Ошибка:

Cannot implicitly convert type 'FileHelpers.Events.AfterReadHandler<MyClass>' to
'FileHelpers.Events.AfterReadHandler<object>'

Я застрял. Есть помощники?

Джейк


person Jake Howlett    schedule 31.07.2013    source источник
comment
Попробуйте создать объект MyClass и использовать его вместо ‹MyClass›   -  person Microsoft DN    schedule 31.07.2013


Ответы (1)


Проблема в том, что вы используете версию движков, которые не используют дженерики, но используют дженерики в обработчике.

Попробуйте с этим:

  var engine = new FileHelperEngine<MyClass>();
  engine.Options.IgnoreFirstLines = 1;
  engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
  engine.AfterReadRecord += new FileHelpers.Events.AfterReadHandler<MyClass>(engine_AfterReadRecord);
person Marcos Meli    schedule 31.07.2013
comment
Спасибо, Маркос. Я пробовал это раньше, но сделал это неправильно: FileHelperEngine engine = new FileHelperEngine‹MyClass›(); который, очевидно, не будет компилироваться. Дох. Спасибо! - person Jake Howlett; 01.08.2013