как правильно вызвать FileHelpers.RecordTypeSelector? - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю с FileHelpers: https://www.filehelpers.net/

У меня есть исходный файл, который содержит набор из примерно 10 различных типов записей. Чтобы приспособиться, я намерен использовать MultiRecordEngine (https://www.filehelpers.net/example/Advanced/MultiRecordEngine/).

Когда я читаю инструкции, я должен объявить двигатель

var engine = new MultiRecordEngine(typeof (Orders),
    typeof (Customer),
    typeof (SampleType));

... и затем введите «CustomSelector» ...

engine.RecordSelector = new RecordTypeSelector(CustomSelector);

Если посмотреть документацию по предоставленной ссылке, «CustomSelector» - это закрытый метод внутри Selector.cs.

private Type CustomSelector(MultiRecordEngine engine, string recordLine)
{
    if (recordLine.Length == 0)
        return null;
    if (Char.IsLetter(recordLine[0]))
        return typeof (Customer);
    else if (recordLine.Length == 14)
        return typeof (SampleType);
    else
        return typeof (Orders);
}

Нет упоминания о делегате, и его объявление не улучшило мнение Мистера Компилятора о моем коде. Кто-нибудь имеет опыт работы с MultiRecordEngine, чтобы сказать мне, какой совершенно очевидный факт я упускаю? Спасибо!

1 Ответ

1 голос
/ 19 февраля 2020

Хорошо, документация и мои глаза были в замешательстве. Данный код ...

engine.RecordSelector = new RecordTypeSelector(CustomSelector);

... полезен, только если CustomSelector является локальной функцией , что мне кажется плохим тоном. Я остановился на отдельном классе Selector и объявил «CustomSelector» как publi c stati c:

public static Type CustomSelector(MultiRecordEngine engine, string recordLine)
{
    if (recordLine.Length == 0)
        return null;
    if (Char.IsLetter(recordLine[0]))
        return typeof (Customer);
    else if (recordLine.Length == 14)
        return typeof (SampleType);
    else
        return typeof (Orders);
}

Как только я скажу MultiRecordEngine, где его найти,

engine.RecordSelector = new RecordTypeSelector(Selector.CustomSelector);

... ты золотой.

Надеюсь, это поможет спасти следующему человеку те 10 минут, которые я потратил, набирая вопрос и ответ. Наслаждайтесь! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...