實現我表示一些空氣隧道的物理特性的對象:類數據驗證
public class Tunnel
{
public double Length { get; set; }
public double CrossSectionArea { get; set; }
public double AirDensity { get; set; }
public double Pressure { get; set; }
//...
}
我需要檢查的參數的正確性:例如,長度必須> 0
,壓力>= 0
等。第一個想法只是把檢查爲屬性存取和拋出異常的無效數據:
public class Tunnel
{
private double length;
public double Length
{
get { return length; }
set
{
if (value <= 0)
throw new TunnelParametersException("Invalid data");
length = value;
}
//...
}
但我有這樣的對象的集合,這將是序列化/從XML文件反序列化到/。所以問題是它不能用於序列化(如果我沒有弄錯)。用戶可以編輯文件並輸入他想要的任何內容,但我無法捕捉它。
所以,據我所知,需要創建一些函數(在Tunnel
類或另一個),我會打電話來檢查所有值是否正確。但是這裏有另一個問題:Tunnel
可能有幾個無效的參數。我應該如何返回錯誤並處理它們?程序必須在一次調用中返回所有發現的錯誤。而這種方式對於我自己的班級使用是有好處的。我可能不能讓其他程序員在每次數據編輯之後使用驗證。
給我請一個諮詢如何會更正確的實現值的此類檢查和解決我的問題 - 也許另一些靈活的方式,這樣會很容易地管理和提高在未來這段代碼。謝謝。
編輯:回到我的第一個想法,是否有任何方法來驗證序列化期間或之後的數據?
我不知道如何實際系列化的作品。但是,當xml被轉換爲對象時,你不想做檢查,所以當輸入不正確時序列化失敗了嗎? – 2011-06-02 19:43:17
你是如何反序列化它的?你是否在Tunnel類上調用靜態Deserialize方法? – 2011-06-02 19:53:22
我將它寫的東西就像這個[教程](http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization)。其實,我是新來的這個問題,但已閱讀,這個過程只是恢復所有的私有成員,而無需調用屬性訪問器。 – 2011-06-02 20:01:06