C# 计数枚举参数的数量

C# 计数枚举参数的数量,c#,enums,C#,Enums,我不熟悉C#中的枚举。我将多个枚举值作为参数传递给一个方法。在我想知道的方法中,我有多少值 让我解释一下 Class A { [Flags] public enum days { sunday =1, monday =2, tuesday= 4 } static void Main(string[] args) { dum

我不熟悉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());

        }
}
'''

我想要实现的就是“如果参数中只有一个值,那么做一些事情;如果参数中有多个值,那么做一些其他事情”。

使用

我想要实现的是“如果参数中只有一个值,那么做一些事情,如果参数中有多个值,那么做一些其他事情”

由于
标志
是值中的单个位,因此是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的幂,如果不是,则设置了多个标志。 请看这里:

但请记住这一点

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



强制转换为整数,然后对设置为1的位数进行计数:

        public enum DAYS
        {
            sunday =1,
            monday =2,
            tuesday= 4
        }
        static void Main(string[] args)
        {
            DAYS days =  DAYS.sunday | DAYS.monday;
            int numDays = CountDays(days);

        }

        static int CountDays(DAYS days)
        {
            int number = 0;
            for(int i = 0; i < 32; i++)
            {
                number += ((uint)days & (1 << i)) == 0 ? 0 : 1;
            }
            return number;
        }
公共枚举天数
{
星期日=1,
星期一=2,
星期二=4
}
静态void Main(字符串[]参数)
{
天=天.星期天|天.星期一;
int numDays=CountDays(天);
}
静态整数计数天数(天)
{
整数=0;
对于(int i=0;i<32;i++)
{
number+=((uint)天&(1是一种方法。这里有一个通用解决方案:

public static int CountFlags( Enum days )
{
    int flagsSet = 0;
    foreach( var value in Enum.GetValues( days.GetType() ) )
    {
        if( days.HasFlag( (Enum)value ) )
        {
            ++flagsSet;
        }
    }

    return flagsSet;
}
我想要实现的就是“如果参数中只有一个值 然后做一些事情,如果有多个值,那么做一些 其他事情”

假设您没有向枚举添加任何“组合”命名值(例如,您没有将
Weekend
成员预设为
Sunday | Saturday
),您可以使用

它将为枚举的命名成员返回非空字符串,并为多个成员的任意组合返回
null

是否查看了该函数?
        public enum DAYS
        {
            sunday =1,
            monday =2,
            tuesday= 4
        }
        static void Main(string[] args)
        {
            DAYS days =  DAYS.sunday | DAYS.monday;
            int numDays = CountDays(days);

        }

        static int CountDays(DAYS days)
        {
            int number = 0;
            for(int i = 0; i < 32; i++)
            {
                number += ((uint)days & (1 << i)) == 0 ? 0 : 1;
            }
            return number;
        }
public static int CountFlags( Enum days )
{
    int flagsSet = 0;
    foreach( var value in Enum.GetValues( days.GetType() ) )
    {
        if( days.HasFlag( (Enum)value ) )
        {
            ++flagsSet;
        }
    }

    return flagsSet;
}