你如何在FileHelpers上进行自定义验证?

时间:2012-03-29 02:23:41

标签: c# .net filehelpers

我想抛出一个例外,说我们的电子邮件地址无效,因为在收到有效的电子邮件地址之前我不想继续。这是我想要做的地方,如果是这样,怎么样?

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

2 个答案:

答案 0 :(得分:3)

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 :(得分:1)

似乎有什么问题?扔掉它:

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