2

有効なメールアドレスを取得するまで続行したくないため、無効なメールアドレスがあることを示す例外をスローしたいと思います。これは私がやりたい場所ですか?もしそうなら、どのように?

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

2 に答える 2

3

イベントで例外をスローしても問題ありませんが、 を に設定するAfterReadRecord必要があります。これにより、エラーを保存してインポートを続行するようにエンジンに指示します。インポート後、エラーを処理できます。ErrorModeSaveAndContinueEngine.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");
        }
    }
}
于 2012-03-29T13:39:34.387 に答える
1

問題に見えるのは?投げるだけ:

if (!isEmailValid)
{
    throw new InvalidDataException("Email is not valid.");
}
于 2012-03-29T02:43:12.903 に答える