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

関連する問題