首页 > 解决方案 > 计算枚举参数的数量

问题描述

我是 C# 中的枚举新手。我将多个枚举值作为参数传递给方法。在我想知道的方法中,我有什么价值观。

让我解释。

Class A
{
        [Flags]
        public enum days
        {
            sunday =1,
            monday =2,
            tuesday= 4
        }
static void Main(string[] args)
        {
            dummy(days.sunday|days.monday);
            dummy(days.sunday);

        }

public static void dummy(days Daysofweek)
        {
            if(\* Daysofweek is oly sunday*/){/*some function*/}
            else if(\* Daysofweek is sunday and monday*/){/*some other  function*/}
            Console.WriteLine(Daysofweek.ToString());

        }
}

'''

我想要实现的只是“如果参数中只有一个值然后做某事,否则如果有多个值然后做其他事情”。

标签: c#enums

解决方案


我想要实现的只是“如果参数中只有一个值然后做某事,否则如果有多个值然后做其他事情”。

由于Flags值中是单个位,因此是 2 的幂,您可以使用

uint v; // we want to see if v is a power of 2
bool f; // the result goes here 

f = (v & (v - 1)) == 0;

检查该值是否是 2 的幂,如果不是,则设置了多个标志。见这里:https ://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2

但请记住这一点

请注意,此处将 0 错误地视为 2 的幂。


public static void dummy(days Daysofweek)
{
    int val = (int) Daysofweek;
    bool hasMultipleFlagsSet = val != 0 && (val & (val - 1)) == 0;

    if(hasMultipleFlagsSet){/*some function*/}
    else {/*some other  function*/}
    Console.WriteLine(Daysofweek.ToString());
}

推荐阅读