详细了解C# 枚举与位枚举
枚举类型是C#语言中的一种基本类型,用于定义一组具有相同类型的命名常量。 在C#中,枚举需要使用enum关键字定义,它指定了该类型是一个枚举类型。比如定义一个颜色的枚举。
enum Color
{
Red,
Green,
Blue
}
在这个枚举类型中,每个颜色都是一个命名常量,Red表示一个红色,Green表示一个绿色,Blue表示一个蓝色。
在C#中,有一个概念叫做“位枚举”,它是一种把多个枚举值组合成一个位模式的方式,从而可以表示多个选项或标志的组合。位枚举需要使用[Flags]属性来标记,比如定义一个组合选项的位枚举。
[Flags]
enum Options
{
None = 0,
Option1 = 1 << 0,
Option2 = 1 << 1,
Option3 = 1 << 2,
Option4 = 1 << 3
}
在这个位枚举类型中,None表示不选任何选项,Option1至Option4分别表示4个可选项。 由于使用了[Flags]标记,因此这个Enum可以进行按位或操作,来表示多个选项或标志的组合。
下面是两个示例,演示如何使用枚举与位枚举。
示例一:使用枚举
enum Size
{
Small,
Medium,
Large
}
class Product
{
public string Name { get; set; }
public Size Size { get; set; }
}
class Program
{
static void Main(string[] args)
{
var products = new Product[]
{
new Product { Name = "Product1", Size = Size.Small },
new Product { Name = "Product2", Size = Size.Medium },
new Product { Name = "Product3", Size = Size.Large },
};
// 过滤大小为Medium的商品
var mediumProducts = products.Where(p => p.Size == Size.Medium);
foreach (var product in mediumProducts)
{
Console.WriteLine(product.Name);
}
}
}
在这个示例中,我们定义了一个Size枚举,用于表示商品的大小,然后将枚举作为Product类的一个属性。我们定义了一个Product数组,包含了3个商品信息,然后使用枚举来过滤大小为Medium的商品。
示例二:使用位枚举
[Flags]
enum DaysOfWeek
{
None = 0,
Monday = 1 << 0,
Tuesday = 1 << 1,
Wednesday = 1 << 2,
Thursday = 1 << 3,
Friday = 1 << 4,
Saturday = 1 << 5,
Sunday = 1 << 6,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
Weekend = Saturday | Sunday,
All = Weekdays | Weekend
}
class Program
{
static void Main(string[] args)
{
// 初始化一个位枚举值
DaysOfWeek selectedDays = DaysOfWeek.Monday | DaysOfWeek.Wednesday | DaysOfWeek.Friday;
// 判断一个值是否包含Monday选项
Console.WriteLine(selectedDays.HasFlag(DaysOfWeek.Monday));
// 判断一个值是否包含Weekend选项
Console.WriteLine(selectedDays.HasFlag(DaysOfWeek.Weekend));
// 获取一个值包含的所有选项
var daysOfWeek = Enum.GetValues(typeof(DaysOfWeek)).OfType<DaysOfWeek>().Where(d => selectedDays.HasFlag(d));
foreach (var day in daysOfWeek)
{
Console.WriteLine(day);
}
}
}
在这个示例中,我们定义了一个DaysOfWeek位枚举,用于表示一周中的每个工作日及周末。我们初始化一个位枚举值来表示选择了星期一、星期三和星期五。然后我们使用HasFlag方法来判断一个值是否包含某个选项,使用Enum.GetValues方法来获取一个值包含的所有选项。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细了解C# 枚举与位枚举 - Python技术站