c# - 有没有办法使用枚举中包含的枚举自动填充 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
,并且这些函数返回不同的类型。
解决方案
忽略任何其他问题(概念或其他)
GetValues
那时你可以使用Cast
var set = new HashSet<MyColors>(Enum.GetValues(typeof(MyColors)).Cast<MyColors>());
// or
var set = Enum.GetValues(typeof(MyColors))
.Cast<MyColors>()
.ToHashSet();
其他资源
检索指定枚举中常量值的数组。
Enumerable.Cast(IEnumerable) 方法
将 IEnumerable 的元素强制转换为指定类型。
使用比较器从 IEnumerable 创建 HashSet 以比较键。
推荐阅读
- java - 使用反射方法设置 EditText 光标颜色
- python-3.x - 如何为多个子图绘制两个交替的 x 比例和两个交替的 y 比例?
- python - 大平面平行板电容器内的简单摆
- matlab - MatLab 循环显示来自向量和字符串数组的信息
- python-2.7 - 查找到树中任何节点的距离
- laravel - 通过 JWTAuth 设置用户rainlab 上次登录时间戳
- modx - 块不保存自闭合标签。有什么办法解决吗?
- css - 绝对定位元素扩展父元素
- regex - How can I remove the email in the end of the url
- python - AWS Glue - Pick Dynamic File