我需要将具有 3 个布尔属性的遗留类转换为标志枚举。
我知道这些属性中至少有一个是正确的。
[Flags]
public enum FlagEnum
{
EnumValue1 = 1,
EnumValue2 = 2,
EnumValue3 = 4
}
public class LegacyClass
{
public bool PropA { get; set; }
public bool PropB { get; set; }
public bool PropC { get; set; }
}
public class DtoClass
{
public FlagEnum FlagEnum { get; set; }
public DtoClass(LegacyClass legacyClass)
{
if (!legacyClass.PropA && !legacyClass.PropB && !legacyClass.PropC)
{
throw new ArgumentException();
}
if (legacyClass.PropA)
{
FlagEnum = FlagEnum.EnumValue1;
}
if (legacyClass.PropB)
{
if (legacyClass.PropA)
{
FlagEnum = FlagEnum.EnumValue1|FlagEnum.EnumValue2;
}
else
{
FlagEnum = FlagEnum.EnumValue2;
}
}
if (legacyClass.PropC)
{
if (legacyClass.PropA||legacyClass.PropB)
{
FlagEnum = FlagEnum | FlagEnum.EnumValue3;
}
else
{
FlagEnum = FlagEnum.EnumValue3;
}
}
}
}
考虑到我可能会遇到需要设置更多属性和标志的情况,是否有更优雅或更简洁的方法来执行此操作?