C# 计数枚举参数的数量
我不熟悉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
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;
}