将一些布尔属性转换为一个标志枚举 [英] Convert some bool properties to a flags enum
本文介绍了将一些布尔属性转换为一个标志枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要将具有3个bool属性的旧类转换为标志枚举。
I need to convert a legacy class with 3 bool properties to a flag enum.
我知道这些属性中至少有一个属性为true。
I know that at least one of those properties is true.
[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;
}
}
}
}
是一个更优雅或更好的方式来考虑,比有人可以有更多的属性,然后标志设置?
there is a more elegant or better way to do it considering than someone can have more properties and then flags to set?
------------ -----更新---------------------------
-----------------UPDATE---------------------------
所有你的解决方案是有效的,并且工作得很好,所以+1给每个人。
All your solution are valid and works great so +1 to everybody.
但是我必须选择一个我最喜欢的一个,因为它是简洁易读的IMHO是 Fredou的。
But I have to choose one and the one I like most because It is concise and readable IMHO is Fredou's.
感谢大家!
推荐答案
这样的事情如何?
using System;
namespace ConsoleApplication1
{
[Flags]
public enum FlagEnum
{
EnumValue1 = 1,
EnumValue2 = 2,
EnumValue3 = 4
}
public static class LegacyClass
{
public static bool PropA { get; set; }
public static bool PropB { get; set; }
public static bool PropC { get; set; }
}
class Program
{
static void Main(string[] args)
{
LegacyClass.PropB = true;
FlagEnum result = LegacyClass.PropA ? FlagEnum.EnumValue1 : 0;
result |= LegacyClass.PropB ? FlagEnum.EnumValue2 : 0;
result |= LegacyClass.PropC ? FlagEnum.EnumValue3 : 0;
}
}
}
这篇关于将一些布尔属性转换为一个标志枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文