3

我有一个具有布尔数组成员的类。如果我修改此数组的元素,则应创建该实例的新修改副本。听起来像是使用不可变类型的绝佳机会。谷歌搜索显示微软提供了一个新的库不可变集合,它非常适合另一个用例。但不适用于上述 bool 数组成员。

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

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

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

所以有什么想法我应该做什么?

4

1 回答 1

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>()解决这个问题)

于 2015-05-09T17:11:19.657 回答