📜  c# 迭代枚举 - C# (1)

📅  最后修改于: 2023-12-03 15:13:52.858000             🧑  作者: Mango

C# 迭代枚举

在 C# 编程语言中,枚举是一种特殊的数据类型,它定义了一组常量并且限定了这些常量的取值范围。C# 迭代枚举是一种特殊的枚举类型,它允许枚举类型的值可以像迭代器一样依次被访问。

定义迭代枚举

迭代枚举定义方式与普通枚举一样,只需在枚举名称后加上关键字 : IEnumerable 即可。下面是一个简单的例子:

enum WeekDays : IEnumerable
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

需要注意的是,定义迭代枚举时必须包含 System.Collections 命名空间。

实现迭代枚举

实现一个迭代枚举需要定义一个 GetEnumerator() 方法,用于返回一个实现了 IEnumerator 接口的对象。IEnumerator 接口包含两个必须实现的方法:MoveNext()CurrentMoveNext() 方法用于将指针移动到下一个元素,而 Current 属性则用于获取指针当前所指向的元素。

下面是一个实现迭代枚举的例子:

enum WeekDays : IEnumerable
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }

    public WeekDaysEnum GetEnumerator()
    {
        for (WeekDaysEnum day = WeekDaysEnum.Monday; day <= WeekDaysEnum.Sunday; day++)
        {
            yield return day;
        }
    }
}

上面的例子实现了一个简单的迭代枚举,并定义了一个实现了 IEnumerator 接口的迭代器。在 GetEnumerator() 方法中,我们可以看到使用了 yield return 语句来返回每一个枚举类型的值。

迭代枚举使用

使用迭代枚举需要使用 foreach 循环结构,下面是一个简单的例子:

WeekDays days = new WeekDays();

foreach (WeekDaysEnum day in days)
{
    Console.WriteLine(day);
}

在上面的例子中,我们使用 new 关键字实例化了一个 WeekDays 对象,然后使用 foreach 循环遍历这个对象并输出每个元素的值。

总结

C# 迭代枚举让我们可以像迭代器一样依次访问枚举类型的值,非常方便。在实现迭代枚举时需要注意实现 GetEnumerator() 方法并返回一个实现了 IEnumerator 接口的对象。在使用迭代枚举时需要使用 foreach 循环结构,然后通过迭代器访问枚举值。