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关键字
如何调用:
- 使用任意该类枚举对象调用
- 使用
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