详细了解C# 枚举与位枚举

详细了解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技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • 如何运行编译.NetCore的源码?

    作为.net的开发人员,为了能更好的code,我们要知其然并知其所以然,了解.netcore的源码是我们的基本素养✊ 源码地址 .NET Platform (github.com) 这个是.net在github上开源的源码地址aspnetcore 这个是.netcore的源码地址 构建方法 构建有几点需要注意一下: 构建比较费时间,可以摸个?; 同时构建还需…

    C# 2023年4月18日
    00
  • C#中Property和Attribute的区别实例详解

    当我们在使用C#编程语言进行开发时,会经常用到Property和Attribute这两个概念,它们虽然有些类似,但是在用法和作用上还是有所区别的。接下来,我将详细讲解C#中Property和Attribute的区别,包括其定义、用法、实例等内容。 Property和Attribute的定义 Property(属性)是一种C#中的成员,它可以让我们在类的外部访…

    C# 2023年5月15日
    00
  • C# javaScript函数的相互调用

    C#和JavaScript都是常用的编程语言,在Web开发中,经常需要对这两种语言进行交互。通过C#代码调用JavaScript函数可以为Web程序添加更多的交互性和动态性。同时,JavaScript函数也可以调用C#代码来实现更为复杂的功能,增强Web程序的性能和灵活性。 下面是“C#和JavaScript函数相互调用”的完整攻略: C#调用JavaScr…

    C# 2023年6月8日
    00
  • C#实现简单串口通讯实例

    下面是详细讲解“C#实现简单串口通讯实例”的完整攻略: 1. 前置知识 在学习本文之前,你需要了解以下内容: C#基础语法 串口通讯基础知识 2. 准备工作 在开始实现串口通讯之前,我们需要准备以下工作: 串口设备(如果你没有可以模拟串口设备) 串口通讯库(本文使用SerialPort类) 首先,我们需要创建项目并引入System.IO.Ports命名空间,…

    C# 2023年5月15日
    00
  • C#在WinForm中使用WebKit传递js对象实现与网页交互的方法

    下面是C#在WinForm中使用WebKit传递js对象实现与网页交互的方法的完整攻略。 先决条件 为了能够使用WebKit,我们需要安装WebKit .NET控件。WebKit可以在GitHub 安装,安装过程简单快速,直接解压缩即可。 集成WebKit到WinForm 将 WebKitBrowser.dll和 WebKit.Interop.dll两个文件…

    C# 2023年5月31日
    00
  • c#哈希算法的实现方法及思路

    C#哈希算法的实现方法及思路攻略 什么是哈希算法? 哈希算法是一种将任意长度的数据映射为固定长度值的算法,这种映射关系称为哈希值或散列值。哈希值通常用一个十六进制字符串表示,其长度与算法常量有关。哈希算法被广泛应用于数据完整性校验、密码存储等场景中。 哈希算法的实现思路 哈希算法的实现思路可以被概括为以下几步: 选择合适的哈希函数:哈希函数是哈希算法的核心,…

    C# 2023年6月6日
    00
  • C# System.TypeInitializationException 异常处理方案

    当在C#程序中调用某个类或静态构造函数时,如果类的静态构造函数引发异常,System.TypeInitializationException异常将抛出。在这种情况下,程序将在控制台或日志中输出异常提示信息,并停止运行。针对这种情况,我们可以采取以下几种处理方案: 方案1:使用try…catch块处理TypeInitializationException异…

    C# 2023年6月6日
    00
  • ASP.NET Core 3.0使用gRPC的具体方法

    ASP.NET Core 3.0使用gRPC的具体方法 简介 gRPC 是由 Google 开发的一种高性能、开源的远程过程调用(RPC)框架。它使用 Protocol Buffers 作为数据交换格式,可以在多种语言之间进行通信。在 .NET Core 3.0 中,我们可以通过 gRPC 快速建立一个高效的微服务。 快速入门 创建 gRPC 服务 我们可以…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部