2012-03-29 32 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