我有一個叫做List類型的Items的組合屬性給一個Order類。在GUI上,用戶填寫一些字段,如名稱,說明,價格,數量等......然後單擊添加項目按鈕,這當然會將項目添加到訂單的項目列表中。我想要做的是創建一個方法來檢查項目的IsComplete屬性,該屬性執行檢查以確保設置所需的屬性,以便某人不能僅僅調用order.Items.Add(item)(如果它不是)完成。如果不是,我想要一個異常被拋出,如果該項目的IsComplete屬性返回false ...什麼是一個簡單的方法來解決這個問題?當List.Add方法被調用時做一個檢查
0
A
回答
1
這可以通過將List<T>
分成派生類,然後覆蓋Add
方法來實現,就像這樣。然後
public class MyItemCollection : List<MyItem>
{
public override void Add(MyItem item)
{
if (item.IsComplete)
{
base.Add(item);
}
else
{
throw new InvalidOperationException("Unable to add an incomplete item");
}
}
}
您的訂單類需要有物業MyItemCollection
,而不是List<T>
,就像這樣:
public class Order
{
public MyItemCollection Items { get; set; }
}
0
您還可以使用ObservableCollection<T>
:http://msdn.microsoft.com/en-us/library/ms668604.aspx
它實現INotifyCollectionChanged
:http://msdn.microsoft.com/en-us/library/System.Collections.Specialized.INotifyCollectionChanged.aspx
0
由於方法Add(T)
是不是虛擬的,你不能重寫,它。
ObservableCollection允許在添加元素時拋出事件,但不能撤消此添加。
可以實現接口IList<T>
與internaly storred一個List<T>
和方法Add(T item)
調用_list.Add(item)
像下面爲例之前添加所需的驗證:
public class MyItemCollection : IList<MyItem>
{
private List<MyItem> _list;
public MyItemCollection()
{
_list = new List<MyItem>();
}
public void Add(MyItem item)
{
if (item.IsComplete)
{
_list.Add(item);
}
else
{
throw new InvalidOperationException("Unable to add an incomplete item");
}
}
//Then you have to implement all the IList interface members...
}
這種解決方案的唯一的問題是,它需要編寫大量的樣板代碼。
如果只有一個類負責對List
的處理,您還可以決定在相關類中實現AddToMyItemCollection(MyItem item)
方法。它甚至是一個很好的實例,因爲它尊重GRASP模式protected variation(Instance.getC()優於Instance.getA()。getB()。getC())
相關問題
- 1. 當一個方法被調用時,UIView無法正確顯示
- 2. rails 3'undefined method'當一個方法在另一個方法內被調用時
- 3. 檢查的方法被調用內部的另一種方法
- 4. 當模擬對象的方法被調用時做些什麼
- 5. Java List.add()方法
- 6. 如何檢查一個方法是否已被調用?
- 7. JUnit:檢查一個無效方法是否被調用
- 8. 當另一個函數被觸發時檢查函數是否被調用
- 9. 自動調用每當一個實例被調用的方法
- 10. 檢測一個方法是否從一個塊被調用
- 11. 阻止List.Add()方法
- 12. 當另一個被檢查時禁用兩個QPushButton
- 13. 如何做一個方法調用
- 14. 當事件發生時註冊方法被調用的方法
- 15. 當方法調用另一個方法時,ArrayList是否爲空?
- 16. 當我定義一個任務時,項目中的哪個方法被調用?
- 17. 當BroadcastReceiver被調用時調用inputMethod的方法
- 18. 起訂量檢驗未檢查,如果被調用的方法
- 19. mockito檢查方法調用
- 20. 當Nuance Dragon被調用時檢測到
- 21. 當我調用一個方法時,爲什麼不調用被重寫的方法?
- 22. 如何重載List.Add方法?
- 23. 雪松 - 檢查一個方法被調用兩次不同的值
- 24. 當試圖調用另一個類的另一個方法的方法時,StackOverflowError
- 25. 當調用IEnumerator.Reset()方法時?
- 26. 當一個方法被調用時,React組件是否自動更新自身
- 27. 當剪貼板的內容被改變時調用一個方法
- 28. 當@PostConstruct標記的方法被調用?
- 29. 爲什麼當fireTableDataChanged()方法被調用
- 30. onCreate沒有被調用,當我檢查斷點時
正是我在找的東西。謝謝! – 2012-04-28 15:11:14