2013-01-14 33 views
0

我有兩個班這樣值無效

class ClassA 
{ 
    // Some properties 
    public String PropertyA { get; set; } 
} 

class ClassB 
{ 
    public List<ClassA> PropertyB { get; private set; } 

    ClassB() 
    { 
     PropertyB = new List<ClassA>(); 
    } 
} 

然後在其他地方我有這樣

public String MyMethod(ClassB argument) 
{ 
    //do stuff with all the PropertyA values 
} 

的方法我想到的是從參數中沒有元素PropertyB有一個null或空的PropertyA(將產生一個無效的結果),我應該拋出什麼樣的異常? ArgumentException的?我有一個方法有一個ClassB類型的參數,ClassB有一個ClassA的列表,每個ClassA有一個屬性是一個字符串。我用這個屬性建立一個查詢,所以我相信更好的是它停在這裏,而不是使用查詢時。

+1

你爲什麼要拋出一個異常,在這種情況下?我會讓.NET框架拋出異常。 –

+0

你的意思是,如果'arguments'是包含數組:'[someClassAInstance,空,anotherInstance]',應該怎麼扔,因爲你不想'null'參考作爲元素值中的一個?編輯:和/或如果說'anotherInstance.PropertyA == null'也是無效的,並應拋出異常? –

+0

@Vraiment根據您的編輯,我建議你記錄的方法DOC嵌套的要求,進行預驗證檢查和拋出一個'ArgumentException'(或從繼承的自定義除外),或移動檢查較低級別的調用(可能是一個'BuildQuery',它最終可能會將'PropertyA'字符串作爲輸入參數,這會引發'ArgumentNullException'),這意味着您將開始構建查詢並部分拋出異常。 –

回答

1

在代碼中,我見過/使用/寫,ArgumentException是當普通的東西是錯誤的參數(屬性爲null,等)拋出。如果參數本身爲空,則會拋出一個ArgumentNullException

不過,通常我不會做,如果我不寫某種類型的庫/框架。一般來說,我讓框架做它的工作。

+0

根據方法的意圖,'InvalidOperationException'也可能是合適的。 – FlyingStreudel

+0

1 [* MSDN *](http://msdn.microsoft.com/en-us/library/seyhszts(V = vs.110)的.aspx)也提出一個'ArgumentException':_「引發ArgumentException或如果傳遞了無效參數,則該類從ArgumentException派生。「_我也會拋出它,因爲這是很好的做法,儘快失敗。否則,如果NullReferenceException出現「太遲」或者導致無效結果(如OP所述),則可能會產生副作用。 http://programmers.stackexchange.com/questions/147480/should-one-check-for-null-if-he-does-not-expect-null –