将一些布尔属性转换为一个标志枚举 [英] Convert some bool properties to a flags enum

查看:168
本文介绍了将一些布尔属性转换为一个标志枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将具有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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆