首页 > 解决方案 > 有没有办法使用枚举中包含的枚举自动填充 C# HashSet?

问题描述

假设我有一个MyColors这样定义的枚举:

enum MyColors { Red, Green, Blue }

我想用那个枚举的枚举填充一个 HashSet。
我知道这样做的唯一方法是:

var allColors = new HashSet<MyColors> { MyColors.Red, MyColors.Green, MyColors.Blue }

问题是每次我向枚举添加颜色时,我都必须更新我的哈希集。

有没有办法在不手动复制枚举值的情况下定义 HashSet?

加分项: HashSet 是一个只读字段,因此需要在定义时对其进行初始化。

请注意,Enum.GetValues并且Enum.GetNames不会有帮助,因为 HashSet 是类型MyColors,并且这些函数返回不同的类型。

标签: c#

解决方案


忽略任何其他问题(概念或其他)

GetValues那时你可以使用Cast

var set = new HashSet<MyColors>(Enum.GetValues(typeof(MyColors)).Cast<MyColors>());

// or

var set = Enum.GetValues(typeof(MyColors))
   .Cast<MyColors>()
   .ToHashSet();

其他资源

Enum.GetValues 方法

检索指定枚举中常量值的数组。

Enumerable.Cast(IEnumerable) 方法

将 IEnumerable 的元素强制转换为指定类型。

Enumerable.ToHashSet 方法

使用比较器从 IEnumerable 创建 HashSet 以比较键。


推荐阅读