Как вы делаете пользовательскую проверку на FileHelpers? - PullRequest
2 голосов
/ 29 марта 2012

Я хочу выдать исключение, чтобы сказать, что у нас неверный адрес электронной почты, поскольку я не хочу продолжать, пока мы не получим действительный адрес электронной почты.Это где я хочу это сделать, и если да, то как?

void Engine_AfterReadRecord(EngineBase engine, FileHelpers.Events.AfterReadEventArgs<UserInfoFromAd> e){
     bool isEmailValid = IsEmailValid(e.Record.Email);
     if (!isEmailValid){
        //I want to throw exception
     }
 }

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Сгенерировать исключение в событии AfterReadRecord можно, но вам нужно установить ErrorMode на SaveAndContinue.Это говорит движку сохранить ошибку в Engine.ErrorManager.Errors и продолжить импорт.После импорта вы можете обработать ошибки.

Вот пример программы:

[DelimitedRecord("|")]
public class MyClass
{
    public string Field1 { get; set; }
    public int Field2 { get; set; }
    public string Email { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var engine = new FileHelperEngine<MyClass>();
        engine.AfterReadRecord += new FileHelpers.Events.AfterReadHandler<MyClass>(engine_AfterReadRecord);
        engine.ErrorMode = ErrorMode.SaveAndContinue;
        // import a record with an invalid Email
        MyClass[] validRecords = engine.ReadString("Hello|23|World");
        ErrorInfo[] errors = engine.ErrorManager.Errors;
        Assert.AreEqual(1, engine.TotalRecords); // 1 record was processed
        Assert.AreEqual(0, validRecords.Length); // 0 records were valid
        Assert.AreEqual(1, engine.ErrorManager.ErrorCount); // 1 error was found
        Assert.That(errors[0].ExceptionInfo.Message == "Email is invalid");
    }

    static bool IsEmailValid(string email)
    {
        return false;
    }

    static void engine_AfterReadRecord(EngineBase engine, FileHelpers.Events.AfterReadEventArgs<MyClass> e)
    {
        bool isEmailValid = IsEmailValid(e.Record.Email);
        if (!isEmailValid)
        {
            throw new Exception("Email is invalid");
        }
    }
}
1 голос
/ 29 марта 2012

В чем проблема?Просто брось:

if (!isEmailValid)
{
    throw new InvalidDataException("Email is not valid.");
}
...