我想做这样的事情:
enum MyEnum { None, One, Two };
var myEnumValues = MyEnum.Values();
我的扩展方法:
public static IEnumerable<T> Values<T>(this Enum enumeration)
where T : struct
=> Enum.GetValues(typeof(T)).Cast<T>();
但它看起来像这样:
MyEnum.None.Values<MyEnum>();
怎么做?
答案 0 :(得分:4)
扩展方法是应用于对象实例的静态方法。
MyEnum
是一种类型,而非实例,因此您无法为其添加扩展方法。
答案 1 :(得分:0)
这样的构造怎么样?它模仿枚举的工作方式,但它有可能实现Values
方法:
public class WeatherType
{
private readonly string name;
public static readonly WeatherType Bad = new WeatherType("Bad");
public static readonly WeatherType Good = new WeatherType("Good");
public static readonly WeatherType Mid = new WeatherType("Mid");
private static readonly WeatherType[] Values = { Bad, Good, Mid };
public static WeatherType[] GetValues()
{
return (WeatherType[])Values.Clone();
}
private WeatherType(string name)
{
this.name = name;
}
}
您现在有一个静态方法来获取可能的值列表,如下所示:
var values = WeatherType.GetValues();