我正在尝试为枚举进行扩展。
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>();