C# 如何对FileHelper进行自定义验证?

C# 如何对FileHelper进行自定义验证?,c#,.net,filehelpers,C#,.net,Filehelpers,我想抛出一个例外,说我们有一个无效的电子邮件地址,因为我不想继续,直到我们得到一个有效的电子邮件地址。这是我想做的吗?如果是,怎么做 void Engine_AfterReadRecord(EngineBase engine, FileHelpers.Events.AfterReadEventArgs<UserInfoFromAd> e){ bool isEmailValid = IsEmailValid(e.Record.Email); if (!isEmail

我想抛出一个例外,说我们有一个无效的电子邮件地址,因为我不想继续,直到我们得到一个有效的电子邮件地址。这是我想做的吗?如果是,怎么做

void Engine_AfterReadRecord(EngineBase engine, FileHelpers.Events.AfterReadEventArgs<UserInfoFromAd> e){
     bool isEmailValid = IsEmailValid(e.Record.Email);
     if (!isEmailValid){
        //I want to throw exception
     }
 }
void Engine\u AfterReadRecord(EngineBase Engine,FileHelpers.Events.AfterReadEventArgs e){
bool isEmailValid=isEmailValid(e.Record.Email);
如果(!isEmailValid){
//我想抛出异常
}
}

问题出在哪里?扔掉它:

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

有什么问题吗?扔掉它:

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

AfterReadRecord
事件中引发异常是可以的,但您需要将设置为
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");
        }
    }
}
[分隔符记录(“|”)
公共类MyClass
{
公共字符串字段1{get;set;}
公共int字段2{get;set;}
公共字符串电子邮件{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var engine=new FileHelperEngine();
engine.AfterReadRecord+=新的FileHelpers.Events.AfterReadHandler(engine\u AfterReadRecord);
engine.ErrorMode=ErrorMode.Save并继续;
//导入带有无效电子邮件的记录
MyClass[]validRecords=engine.ReadString(“Hello | 23 | World”);
ErrorInfo[]errors=engine.ErrorManager.errors;
Assert.AreEqual(1,engine.TotalRecords);//处理了1条记录
Assert.AreEqual(0,validRecords.Length);//0条记录有效
Assert.AreEqual(1,engine.ErrorManager.ErrorCount);//发现1个错误
Assert.That(错误[0]。ExceptionInfo.Message==“电子邮件无效”);
}
静态bool IsEmailValid(字符串电子邮件)
{
返回false;
}
静态无效引擎\u AfterReadRecord(EngineBase引擎,FileHelpers.Events.AfterReadEventArgs e)
{
bool isEmailValid=isEmailValid(e.Record.Email);
如果(!isEmailValid)
{
抛出新异常(“电子邮件无效”);
}
}
}

AfterReadRecord
事件中抛出异常是可以的,但是您需要将设置为
保存并继续。这告诉引擎将错误保存到
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");
        }
    }
}
[分隔符记录(“|”)
公共类MyClass
{
公共字符串字段1{get;set;}
公共int字段2{get;set;}
公共字符串电子邮件{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var engine=new FileHelperEngine();
engine.AfterReadRecord+=新的FileHelpers.Events.AfterReadHandler(engine\u AfterReadRecord);
engine.ErrorMode=ErrorMode.Save并继续;
//导入带有无效电子邮件的记录
MyClass[]validRecords=engine.ReadString(“Hello | 23 | World”);
ErrorInfo[]errors=engine.ErrorManager.errors;
Assert.AreEqual(1,engine.TotalRecords);//处理了1条记录
Assert.AreEqual(0,validRecords.Length);//0条记录有效
Assert.AreEqual(1,engine.ErrorManager.ErrorCount);//发现1个错误
Assert.That(错误[0]。ExceptionInfo.Message==“电子邮件无效”);
}
静态bool IsEmailValid(字符串电子邮件)
{
返回false;
}
静态无效引擎\u AfterReadRecord(EngineBase引擎,FileHelpers.Events.AfterReadEventArgs e)
{
bool isEmailValid=isEmailValid(e.Record.Email);
如果(!isEmailValid)
{
抛出新异常(“电子邮件无效”);
}
}
}

谢谢各位。。我想我主要关心的是抛出一种类型的异常是否会带来一些问题。。。再次感谢..@Petr@Shamp00谢谢各位。。我想我主要关心的是抛出一种类型的异常是否会带来一些问题。。。再次感谢..@Petr@shamp00