我有一个数据库中的可标记枚举,我想将其转换为第三方的枚举数组。
为此,我使用以下代码:
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个条目,我认为这会变得非常混乱和丑陋。有更好的方法吗?
答案 0 :(得分:6)
一个简单的解决方案是根据OurEnum
创建TheirEnum
,然后一个简单的演员就可以了。
这是一个例子:
[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();