c# - 循环遍历枚举并运行通用操作的扩展方法
问题描述
解决方案
正如您所发现的,您可以通过站立来做您想做的事情(并确保您的两种类型规范对齐;如果typeof(T)
不匹配,您可能希望在扩展方法中抛出异常t
)。
问题是您无法创建静态扩展方法。您只能在实例上调用扩展方法。因此,例如,我可以执行以下操作:
public static void Foreach<T>(this T anEnum, Action<string, T> action) where T : struct, Enum
{
foreach (var name in Enum.GetNames(typeof(T)))
{
Enum.TryParse<T>(name, out var val);
action(name, val);
}
}
但是,我只能在我的枚举类型的实例上调用它,而不是在类型名称本身上。因此,例如,这有效:
public enum ATestEnum
{
A,
Test,
Enum
}
后面跟着这段代码:
ATestEnum.Test.Foreach((name, val) => Debug.WriteLine($"Name: {name}, Value: {val}"));
但是,由于您无法调用它ATestEnum
,您必须在ATestEnum
(在这种情况下ATestEnum.Test
)的实例上调用它。这是很麻烦的,因为它作用于枚举类型的所有实例。这就是生活。