2012-03-29 31 views
1

我想抛出一个例外,说我们有一个无效的电子邮件地址,因为我不想继续,直到我们得到一个有效的电子邮件地址。这是我想要做的地方吗?如果是这样,怎么办?你如何在FileHelpers上进行自定义验证?

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

回答

1

什么似乎是问题?只是把它:

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

引发异常的AfterReadRecord事件是好的,但你需要设置ErrorModeSaveAndContinue。这告诉引擎将错误保存到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"); 
     } 
    } 
} 
+0

谢谢你们..我想主要是我担心的是,如果抛出一个异常类型会对一些问题......再次感谢.. @彼得@ shamp00 – Ronnel 2012-04-19 01:36:39