我試圖創建一個不可變的數據結構,它是任務列表。 我希望每個任務都有對列表的引用,並且列表將返回所有任務並具有當前任務屬性。不可變數據結構中的循環引用
問題是如何讓循環引用從任務到列表和從列表到任務,仍然具有不變的數據結構?
如果我先創建的任務,我不能有參考列表,因爲它還不存在,如果我走另一條路 - 創建列表首先,我將不得不改變它,以便將任務添加到它。
謝謝, 伊多。
我試圖創建一個不可變的數據結構,它是任務列表。 我希望每個任務都有對列表的引用,並且列表將返回所有任務並具有當前任務屬性。不可變數據結構中的循環引用
問題是如何讓循環引用從任務到列表和從列表到任務,仍然具有不變的數據結構?
如果我先創建的任務,我不能有參考列表,因爲它還不存在,如果我走另一條路 - 創建列表首先,我將不得不改變它,以便將任務添加到它。
謝謝, 伊多。
我敢肯定你可以創建列表,並在構造函數中構造列表項,同時將列表作爲參數傳遞給它們。
僞代碼:
List constructor:
List()
{
for each item to add
add(new Item(this));
}
Item constructor:
Item(List list)
{
this.list = list;
}
然而,這類型的休息模塊化的,由於該表的構造必須處理所有的邏輯來創建項目。
我會試試看看它是否適用於C#。謝謝 – 2013-02-14 17:44:05
這是在C#中工作。看到這裏http://pastebin.com/E8qcLRMP。唯一的問題是在ctor內部使用這個,但我只保存它並且不做任何事情。 – 2013-02-14 18:01:00
您不能同時創建列表和任務,因此您必須先創建一個。在某些時候,你從一個空的列表開始(例如在列表的構造函數或其他地方)。
給定空列表,您可以創建任務:例如在列表的構造函數中,或列表中的方法。您可以將對列表的引用傳遞給任務的構造函數。然後將任務添加到列表中,這樣列表就會有一個對任務的引用。
這意味着我改變列表,所以它不是我正在尋找的解決方案 – 2013-02-14 17:43:24
什麼語言?還是理論上? – Dukeling 2013-02-14 14:28:52
如果您將構建列表和任務所需的所有參數傳遞給列表構造函數,它將在技術上可行(例如,通過將「this」傳遞給任務的構造函數)。 – 2013-02-14 14:31:52
相關:http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one-kinds-of-immutability.aspx – delnan 2013-02-14 16:47:38