在 C# 中寻找可用的不可变 bool 数组
Looking for usable immutable bool array in C#
我有一个 class,它有一个 bool 数组成员。如果我修改此数组的元素,则应创建该实例的新修改副本。听起来像是使用不可变类型的绝好机会。谷歌搜索显示 Microsoft 提供了一个新库 Immutable Collections,它对另一个用例非常有效。但不适用于上述 bool 数组成员。
暂时删除了看似合适的类型 ImmutableArray,文档似乎也没有包含索引器。潜在的替代 ImmutableList 不适用于结构。我不愿意介绍另一个第三方库,所以我想知道我有哪些选项以及我应该选择哪些选项。
我可以创建一个 class Bool 来满足引用类型的要求。或者我可以使用 BitArray,但尝试像这样使用失败并出现编译错误:
IReadOnlyList<BitArray> test = new IReadOnlyList<BitArray>(new BitArray());
那么我应该怎么做?
请注意,这是完全有效的:
var ba = new BitArray(10);
ba.SetAll(true);
IImmutableList<bool> test = ba.Cast<bool>().ToImmutableList();
您的问题是不可变项目类型是 bool
,而不是 BitArray
!而那个BitArray
是pre-generics时代的,所以不支持IEnumerable<bool>
、ICollection<bool>
、IList<bool>
,所以不能直接使用(见.Cast<bool>()
解决这个问题)
我有一个 class,它有一个 bool 数组成员。如果我修改此数组的元素,则应创建该实例的新修改副本。听起来像是使用不可变类型的绝好机会。谷歌搜索显示 Microsoft 提供了一个新库 Immutable Collections,它对另一个用例非常有效。但不适用于上述 bool 数组成员。
暂时删除了看似合适的类型 ImmutableArray,文档似乎也没有包含索引器。潜在的替代 ImmutableList 不适用于结构。我不愿意介绍另一个第三方库,所以我想知道我有哪些选项以及我应该选择哪些选项。
我可以创建一个 class Bool 来满足引用类型的要求。或者我可以使用 BitArray,但尝试像这样使用失败并出现编译错误:
IReadOnlyList<BitArray> test = new IReadOnlyList<BitArray>(new BitArray());
那么我应该怎么做?
请注意,这是完全有效的:
var ba = new BitArray(10);
ba.SetAll(true);
IImmutableList<bool> test = ba.Cast<bool>().ToImmutableList();
您的问题是不可变项目类型是 bool
,而不是 BitArray
!而那个BitArray
是pre-generics时代的,所以不支持IEnumerable<bool>
、ICollection<bool>
、IList<bool>
,所以不能直接使用(见.Cast<bool>()
解决这个问题)