2015-05-09 73 views
3

我有一個有bool數組成員的類。如果我修改這個數組的一個元素,應該創建一個新的實例修改副本。聽起來像是使用Immutable類型的絕佳機會。谷歌搜索顯示,微軟提供了一個新的庫Immutable Collections,這對另一個用例來說效果很好。但不適用於上述布爾數組成員。在C#中尋找可用的不可變布爾值數組#

看似合適的類型ImmutableArray暫時被刪除,文檔似乎也沒有包含索引器。潛在的替換ImmutableList不適用於結構。我不願意介紹另一個第三方庫,所以我想知道我有什麼選擇,我應該選擇哪一個。

我可以創建一個類Bool來滿足引用類型的要求。或者,我可以使用BitArray,而是試圖用這樣的失敗,編譯錯誤:

IReadOnlyList<BitArray> test = new IReadOnlyList<BitArray>(new BitArray()); 

因此,任何想法,我應該怎麼辦呢?

+0

* ImmutableList *從什麼時候?我可以使用它與一個結構。 – xanatos

+0

@xanatos我使用ImmutableList在另一臺計算機上再次使用一個結構體進行了測試,現在它似乎正常工作。不知道爲什麼問題出現了,因爲我只是在提問前兩天安裝了包裝。儘管如此,感謝您自己測試它,這爲我節省了一些麻煩。 :) – Johannes

回答

2

注意,這是完全合法的:

var ba = new BitArray(10); 
ba.SetAll(true); 

IImmutableList<bool> test = ba.Cast<bool>().ToImmutableList(); 

您的問題是不可改變的項目類型是bool,不BitArray!這BitArray是從預仿製藥時代,所以它不支持IEnumerable<bool>ICollection<bool>IList<bool>,所以你不能直接使用它(見.Cast<bool>()解決此問題)

+0

正如在我的問題下面的評論中提到的,它似乎是某種安裝問題,而不是一個實際的問題,布爾是一個結構,而不是一個參考。我仍然會將其標記爲想要的答案,因爲它確實表明我的原始方法應該已經開箱即用。 – Johannes