我有一个有bool数组成员的类。如果我修改此数组的元素,则应创建该实例的新修改副本。听起来像是使用Immutable类型的绝佳机会。谷歌搜索显示,微软提供了一个新的库Immutable Collections,它适用于另一个用例。但不适用于前面提到的bool阵列成员。
看似合适的类型ImmutableArray暂时被删除,文档似乎也没有包含索引器。潜在的替代品ImmutableList不适用于结构体。我不愿意介绍另一个第三方图书馆,所以我想知道我有哪些选择以及我应该选择哪些。
我可以创建一个类Bool来满足引用类型的要求。或者我可以使用BitArray,但尝试使用这样的程序会因编译错误而失败:
IReadOnlyList<BitArray> test = new IReadOnlyList<BitArray>(new BitArray());
所以我应该做些什么?
答案 0 :(得分: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>()
解决此问题)