我需要將具有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;
}
}
}
}
還有一個更優雅的或更好的方式來做到這一點考慮比別人可以有更多的屬性,然後標誌設置?
----------------- UPDATE ---------------------------
您的所有解決方案都是有效的,並且非常適合每個人+1。
但我必須選擇一個和我最喜歡的,因爲它是簡潔和可讀的恕我直言是Fredou's。
感謝大家!
@BartoszKP FlagEnum = FlagEnum | FlagEnum.EnumValue3; – giammin
@BartoszKP沒問題! :) – giammin