在C#中寻找可用的不可变bool数组

时间:2015-05-09 16:52:59

标签: c# arrays immutability immutable-collections

我有一个有bool数组成员的类。如果我修改此数组的元素,则应创建该实例的新修改副本。听起来像是使用Immutable类型的绝佳机会。谷歌搜索显示,微软提供了一个新的库Immutable Collections,它适用于另一个用例。但不适用于前面提到的bool阵列成员。

看似合适的类型ImmutableArray暂时被删除,文档似乎也没有包含索引器。潜在的替代品ImmutableList不适用于结构体。我不愿意介绍另一个第三方图书馆,所以我想知道我有哪些选择以及我应该选择哪些。

我可以创建一个类Bool来满足引用类型的要求。或者我可以使用BitArray,但尝试使用这样的程序会因编译错误而失败:

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

所以我应该做些什么?

1 个答案:

答案 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>()解决此问题)