2012-07-23 115 views
0

我有一個驗證某些XML的靜態方法。爲了驗證XML並不停止錯誤,它需要有一個靜態回調ValidationEventHandler來處理錯誤事件(如果你沒有註冊回調,任何錯誤都會拋出異常並且驗證停止)。在靜態方法和靜態事件處理程序之間共享數據

所以在這個ValidationEventHandler是你處理任何驗證錯誤的地方。靜態驗證方法讀取XML並針對任何錯誤事件,將調用事件處理程序。

我的問題是,靜態驗證方法需要返回一個布爾標誌,表示如果有任何錯誤,而且有錯誤列表的輸出參數字符串。但是由於錯誤處理是在ValidationEventHandler中完成的,而ValidationEventHandler必須是靜態的,因爲驗證方法是靜態的,所以如何保存事件處理程序中發生的錯誤的運行列表?

如果這些人不是靜態的,我只是做一個實例變量來保存錯誤標誌和錯誤字符串,但我不知道如何從一個靜態的事件處理程序將數據傳遞給它做了一個靜態方法導致處理程序發生事件的處理。

任何想法?

+3

靜態變量? – 2012-07-23 20:04:48

+0

這一切聽起來像你不應該使用'static'方法和事件,他們應該是正常的,實例方法和事件。 – svick 2012-07-23 20:11:00

+0

我不完全理解。首先你說你的「靜態驗證方法」檢測錯誤。接下來,您說,錯誤處理在做的ValidationEventHandler ...澄清一些事情,並告訴我們您所使用的代碼。 – 2012-07-23 20:11:08

回答

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 
} 
相關問題