将可标记的枚举映射到数组
本文关键字:映射 数组 枚举 | 更新日期: 2023-09-27 18:31:27
我有一个来自数据库的可标记枚举,我想将其转换为第三方的枚举数组。
为此,我使用以下代码:
private TheirEnum[] GetTheirEnums(MyEnum? ourEnums)
{
List<TheirEnum> result = new List<TheirEnum>();
if (ourEnums != null)
{
if (ourEnums.Value.HasFlag(MyEnum.Geothermal))
{
result.Add(TheirEnum.GEOTHERMAL);
}
if (ourEnums.Value.HasFlag(MyEnum.SolarHeating))
{
result.Add(TheirEnum.SOLAR_HEATING);
}
}
else
{
result.Add(TheirEnum.NO_INFORMATION);
}
return result.ToArray();
}
但是,由于该枚举列表中有 50 多个条目,我认为这会变得非常混乱和丑陋。有没有更好的方法可以做到这一点?
一个简单的解决方案是基于TheirEnum
创建OurEnum
,然后一个简单的强制转换就可以了。
下面是一个示例:
[Flags]
public enum TheirEnum
{
GEOTHERMAL=1,
SOLAR_HEATING=2,
NO_INFORMATION=4
}
[Flags]
public enum OurEnum
{
Geothermal=TheirEnum.GEOTHERMAL,
SolarHeating=TheirEnum.SOLAR_HEATING,
NoInformation=TheirEnum.NO_INFORMATION
}
或者您甚至可以只使用这些值:
[Flags]
public enum OurEnum
{
Geothermal=1,
SolarHeating=2,
NoInformation=4
}
然后一个简单的强制转换会转换它:
var ourValue = OurEnum.Geothermal | OurEnum.NoInformation;
var theirValue = (TheirEnum) ourValue;
最后,我们可以简单地基于 theirValue
中标记的枚举创建一个数组:
var values=Enum.GetValues(typeof(TheirEnum));
var array= (from TheirEnum v in values where theirValue.HasFlag(v) select v).ToArray();