0

我有一个验证某些 XML 的静态方法。为了验证 XML 并且不停止错误,它需要有一个静态回调 ValidationEventHandler 来处理错误事件(如果您不注册回调,任何错误都会引发异常并停止验证)。

因此,在此 ValidationEventHandler 中,您可以处理任何验证错误。静态验证方法读取 XML,对于任何错误事件,都会调用事件处理程序。

我的问题是,静态验证方法需要返回一个 bool 标志来指示是否有任何错误,以及一个包含错误列表的输出参数字符串。但是由于错误处理是在 ValidationEventHandler 中完成的,它必须是静态的,因为验证方法是静态的,我如何保持事件处理程序中发生的错误的运行列表?

如果这些不是静态的,我只需创建一个实例变量来保存一个错误标志和一个错误字符串,但我不知道如何将数据从静态事件处理程序传递到一个静态方法,该方法执行导致该处理程序发生的事件。

有任何想法吗?

4

1 回答 1

1

如果我理解正确,您可以通过几种不同的方式来做到这一点

第一种方法是创建一个静态属性:

static bool HasErrors { get; set; }

void HandleErrorEvent(object sender, EventArgs e)
{
    HasErrors = true;
    // ... your logic here
}

另一个选项(这取决于您是否有权访问事件代码)是创建一个自定义EventArgs

public ExceptionEventArgs : EventArgs
{
    public bool HasErrors { get; private set; }
    // Anything you else you want, like a list of error strings etc...
}

void HandleError(object sender, ExceptionEventArgs e)
{
    e.HasErrors = true;
    // ... your logic here
}

void Validate()
{
    var eventArgs = new ExceptionEventArgs()
    OnHandleError(this, eventArgs);
    if(eventArgs.HasErrors)
        // do something special
}
于 2012-07-23T20:17:38.850 回答