我有一個叫做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. Java List.add()方法
- 3. 如何檢查一個方法是否已被調用?
- 4. JUnit:檢查一個無效方法是否被調用
- 5. 自動調用每當一個實例被調用的方法
- 6. 阻止List.Add()方法
- 7. 如何檢查某個方法是否被調用?
- 8. 當事件發生時註冊方法被調用的方法
- 9. 當我定義一個任務時,項目中的哪個方法被調用?
- 10. 當BroadcastReceiver被調用時調用inputMethod的方法
- 11. mockito檢查方法調用
- 12. 當我調用一個方法時,爲什麼不調用被重寫的方法?
- 13. 當調用IEnumerator.Reset()方法時?
- 14. onCreate沒有被調用,當我檢查斷點時
- 15. 當@PostConstruct標記的方法被調用?
- 16. 檢查按鍵時OnTriggerStay()被調用
- 17. 私有方法調用另一個私有方法,做對嗎?
- 18. 檢測一個方法未被覆蓋
- 19. 當一個按鈕被按下時調用一個函數 - pyqt
- 20. 在做調用時,我能做的只是調用一些靜態方法?
- 21. 檢查條件時調用函數的最佳做法
- 22. 調用方法時,在模擬預期方法被調用
- 23. 調用方法A時調用另一個方法B
- 24. 如何檢查是否有方法被孩子調用?
- 25. RSpec。如何檢查對象方法是否被調用?
- 26. 如何檢查get或post方法是否被調用
- 27. 檢查模擬的方法被調用,而不
- 28. 如何檢查函數是否被方法調用?
- 29. 檢查調用靜態方法時是否調用了特定方法
- 30. RSpec2:存根被另一個方法調用的方法
正是我在找的東西。謝謝! – 2012-04-28 15:11:14