以更简单的方式使用enum的扩展



我正在尝试为枚举进行扩展。

public enum Cars {
Chevrolet,
Corvette,
Lambo
}
public static T[] ToEnumArray<T>(this T type)
{
return (T[])Enum.GetValues(type.GetType());
}
===============================
this part will not work
===============================
var data = Cars.ToEnumArray();
===============================
foreach(var _result in data) {
Console.WriteLine(_result);
}

我知道我可以用ToEnumArray<Cars>()但是这条路不可能吗?只需执行Cars.ToEnumArray()

在没有扩展的情况下如何工作

public static T[] ToEnumArray<T>()
{
return (T[])Enum.GetValues(typeof(T));
}
Cars[] cars = ToEnumArray<Cars>();

只有两种方法可以调用扩展方法。您可以像在静态类中声明的常规静态方法那样调用它,也可以像实例方法(扩展方法调用(那样调用它。

语言规范说:

扩展方法是一种常规静态方法。此外,如果其封闭的静态类在作用域中,则可以使用实例方法调用语法来调用扩展方法,并使用接收器表达式作为第一个参数。

不能在未声明它的类型(如Cars(上调用它。

我的建议是声明一个常规的静态方法:

static class UtilityClass {
public static T[] ToEnumArray<T>() where T: Enum
{
return (T[])Enum.GetValues(typeof(T));
}
}

如果你不喜欢一直写前缀UtilityClass.,可以使用using static指令:

using static SomeNamespace.UtilityClass;
...
Cars[] cars = ToEnumArray<Cars>();

最新更新