【问题标题】:Adding multiple values to Enum Type variable向枚举类型变量添加多个值
【发布时间】:2011-08-17 00:54:07
【问题描述】:

http://msdn.microsoft.com/en-us/library/cc138362.aspx

我参考了上面链接中的代码,它显示了向枚举类型添加值。 但它不适合我。 代码预期输出: 我得到了实际输出:

请参考代码: **
// 预期输出:会议日期是周二、周四、周五

// 实际输出:会议日期是星期五

// 预期输出:会议日期是星期四、星期五

// 实际输出:会议日期为星期一**

     class Program
{
    enum Days2
    {
        None = 1,
        Sunday = 2,
        Monday = 3,
        Tuesday = 4,
        Wednesday = 5,
        Thursday = 6,
        Friday = 7,
        Saturday = 8
    }



    static void Main(string[] args)
    {
        Days2 meetingDays = Days2.Tuesday | Days2.Thursday;

        // Initialize with two flags using bitwise OR.
        meetingDays = Days2.Tuesday | Days2.Thursday;

        // Set an additional flag using bitwise OR.
        meetingDays = meetingDays | Days2.Friday;


        Console.WriteLine("Meeting days are {0}", meetingDays);
        // Expected Output: Meeting days are Tuesday, Thursday, Friday
        **// Actual Output: Meeting days are  Friday**

        // Remove a flag using bitwise XOR.
        meetingDays = meetingDays ^ Days2.Tuesday;
        Console.WriteLine("Meeting days are {0}", meetingDays);

        // Expected Output: Meeting days are Thursday, Friday
        **// Actaul Output: Meeting days are Monday**

        Console.ReadLine();

    }
}

【问题讨论】:

标签: c# enums


【解决方案1】:

为了能够使用按位运算来组合枚举值,它们需要具有对应于 2 的幂的值。

此外,您应该使用Flags 属性标记枚举,并且按照惯例使用零作为“未设置标志”。示例:

[Flags]
public enum Days2 
{
    None = 0,
    Sunday = 1
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64
}

请参阅C# Programming Guide 了解更多信息。

【讨论】:

    【解决方案2】:

    将 [Flags] 属性添加到您的枚举中。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        Days2.Tuesday | Days2.Thursday;的值应该是10。按位与本质上是加法。

        如果你想要几天,就这样做吧,二进制样式:

        enum Days2
        {
            None = 0,
            Sunday = 1,
            Monday = 2,
            Tuesday = 4,
            Wednesday = 8,
            Thursday = 16,
            Friday = 32,
            Saturday = 64    
        }
        

        或者像其他人所说的那样使用 Flags 属性。

        【讨论】:

        • 看Flags属性定义...绝对是干净的解决方案
        【解决方案5】:

        [Flags] 属性标记枚举。

        [Flags]
        enum Days2
        {
            None = 0,
            Sunday = 1,
            Monday = 2,
            Tuesday = 4,
            Wednesday = 8,
            Thursday = 16,
            Friday = 32,
            Saturday = 64
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-24
          • 1970-01-01
          • 2019-12-08
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          相关资源
          最近更新 更多