C#学习记录-遍历枚举值/类的扩展方法

102 阅读1分钟

C#学习记录-遍历枚举值/类的扩展方法

1. 静态方法

起因是想遍历枚举中的每个值。

枚举举例如下。

public enum Week
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

最初的解决方法:

  • 工具类 Utility
  • Utility提供方法GetEnum
public class Utility
{
    public static T[] GetEnum<T>() where T : Enum => (T[])Enum.GetValues(typeof(T));
}

使用时调用 Utility.GetEnum<Week>() 输出Week全部枚举值组成的集合。

2. 扩展枚举类的方法

直接使用静态方法扩展的问题:

  • 使用自定义类进行访问,增加了学习成本
  • 在此例则是必须要知道 Utility 类 才能使用

要解决该问题,可以对 Enum类进行扩展

public static class Utility
{
    public static T[] GetEnum<T>(this T value) where T : Enum => (T[])Enum.GetValues(typeof(T));
}

对比静态方法,类的扩展方法要求:

  • 必须为静态类
  • 第一个参数为被扩展类,且有this关键字

如何调用:

  1. 使用任意该类枚举对象调用
  2. 使用new Week()创建临时对象调用
public class Program
{
    public static void Main(string[] args)
    {
        Week week=Week.Monday;
        Console.WriteLine("使用任意对象调用");
        foreach (var item in week.GetEnum<Week>()) Console.WriteLine(item);
        Console.WriteLine("使用临时对象调用");
        foreach (var item in new Week().GetEnum<Week>()) Console.WriteLine(item);
    }
}

输出结果为:

使用任意对象调用
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
使用临时对象调用
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday