2013-03-23 51 views
0

所以,我有:使用+ =和 - =在吸氣運營商/ Dictionary對象的制定者

Dictionary<some_enumerator, int> available_spaces; 
Dictionary<some_enumerator, int> occupied_spaces; 
Dictionary<some_enumerator, int> total_spaces; 

的想法是,我佔據給出類型的空間,我可以標記有多少空間類型X被佔用,並在我調用Occupy(enum.space_type)之前檢查以確保有可用空間。

目前,我對被佔領和可用空間簡單的getter/setter方法:

public Dictionary<some_enumerator, int> Occupied_Spaces { get; set; } 
public Dictionary<some_enumerator, int> Available_Spaces { get; set; } 
public Dictionary<some_enumerator, int> Total_Spaces { get; set; } 

理想情況下,我想重新計算每個鍵的可用空間(通過簡單地減去全部槽所佔用的時隙)只要我們稱之爲佔用空間,例如而不是這樣做:

object.Occupied_Spaces[space_type]++; 
object.RecalculateSpaces(); 
我每次修改Occupied_Spaces時間

,我想,而不是像做(我知道這是不行的,但你的想法:

public Dictionary<some_enumerator> Occupied_Spaces { 
    get { return _occupied_spaces; } 
    set { _occupied_spaces = value; RecalculateSpaces(); } 
} 

目前,調用Occupied_Spaces [key] ++不會調用佔位空間中的setter(我通過將調試打印到RecalculateSpaces中進行測試,該調試沒有觸發)

但我不知道如何覆蓋+任何其他基本的操作員)對於字典。有沒有簡單的方法來做到這一點?

+0

爲什麼你需要重寫這些運營商?如果你正在使用'int',這些已經被定義並且不能被覆蓋。 – Oded 2013-03-23 19:50:21

+0

'我知道這不起作用 - - 它不起作用?盧斯對我來說OK。 – Oded 2013-03-23 19:51:08

+0

目前,調用Occupied_Spaces [key] ++不會調用佔位空間中的setter(我通過將調試打印到RecalculateSpaces中進行測試,該調試沒有觸發)。 – user462879 2013-03-23 19:55:10

回答

3
public Dictionary<some_enumerator> Occupied_Spaces { 
    get { return _occupied_spaces; } 
    set { _occupied_spaces = value; RecalculateSpaces(); } 
} 

目前,呼叫Occupied_Spaces [關鍵] ++不調用Occupied_Spaces(我拋出一個調試打印成RecalculateSpaces測試,這不火)的制定者。

沒錯。那是因爲你沒有設置Occupied_Spaces。你的Occupied_Spaces仍然是指完全相同的字典對象,只有它的內容已經改變。

Dictionary<,>沒有任何Change事件供您訂閱,所以您遇到的問題無法解決。你可以做的是創建一個實現IDictionary<,>的自定義類,並使用該接口。當字典內容改變時,您的自定義類可以觸發事件。

0

您可避免需要同步通過此功能替換Available_Spaces

GetAvailableSpace(some_enumerator e) 
{ 
    return Total_Spaces[e] - Occupied_Spaces[e]; 
}