5 回答
TA贡献1804条经验 获得超8个赞
我想要实现的只是“如果参数中只有一个值,则做某事,否则,如果有多个值,则做其他事情”。
由于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 的幂,如果不是,则设置了多个标志。
但请记住这一点
请注意,此处 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());
}
TA贡献1862条经验 获得超6个赞
这是一个通用的解决方案:
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;
}
TA贡献1936条经验 获得超6个赞
使用HasFlag
using System;
[Flags] public enum Pets {
None = 0,
Dog = 1,
Cat = 2,
Bird = 4,
Rabbit = 8,
Other = 16
}
public class Example
{
public static void Main()
{
Pets[] petsInFamilies = { Pets.None, Pets.Dog | Pets.Cat, Pets.Dog };
int familiesWithoutPets = 0;
int familiesWithDog = 0;
foreach (var petsInFamily in petsInFamilies)
{
// Count families that have no pets.
if (petsInFamily.Equals(Pets.None))
familiesWithoutPets++;
// Of families with pets, count families that have a dog.
else if (petsInFamily.HasFlag(Pets.Dog))
familiesWithDog++;
}
Console.WriteLine("{0} of {1} families in the sample have no pets.",
familiesWithoutPets, petsInFamilies.Length);
Console.WriteLine("{0} of {1} families in the sample have a dog.",
familiesWithDog, petsInFamilies.Length);
}
}
// The example displays the following output:
// 1 of 3 families in the sample have no pets.
// 2 of 3 families in the sample have a dog.
TA贡献1811条经验 获得超4个赞
转换为整数,然后计算设置为 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;
}
TA贡献1810条经验 获得超4个赞
我想要实现的只是“如果参数中只有一个值,则做某事,否则,如果有多个值,则做其他事情”。
假设您没有向枚举添加任何“组合”命名值(例如,您没有Weekend
预先设置为 的成员Sunday|Saturday
),您可以使用Enum.GetName
对于枚举的命名成员以及null
多个成员的任意组合,它将返回一个非空字符串。
- 5 回答
- 0 关注
- 132 浏览
添加回答
举报