C# 在静态方法和静态事件处理程序之间共享数据

C# 在静态方法和静态事件处理程序之间共享数据,c#,.net,event-handling,C#,.net,Event Handling,我有一个静态方法来验证一些XML。为了验证XML并且不在出现错误时停止,它需要一个静态回调ValidationEventHandler来处理错误事件(如果不注册回调,任何错误都会引发异常并停止验证) 因此,在这个ValidationEventHandler中,您可以处理任何验证错误。静态验证方法读取XML,对于任何错误事件,都将调用事件处理程序 我的问题是,静态验证方法需要返回一个bool标志以指示是否存在任何错误,以及一个包含错误列表的输出参数字符串。但是,由于错误处理是在Validation

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

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

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

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


有什么想法吗?

如果我理解正确,你可以用几种不同的方法来做

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

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
}

这一切听起来好像你不应该使用
static
方法和事件,它们应该是普通的,实例方法和事件。我不完全理解。首先,您说您的“静态验证方法”检测到错误。接下来,您说错误处理是在ValidationEventHandler中完成的。。。我想我误解了静态变量是如何工作的,但它们在这方面工作得很好。