首页 > 解决方案 > 循环遍历枚举并运行通用操作的扩展方法

问题描述

标签: c#genericsforeachenumsextension-methods

解决方案


正如您所发现的,您可以通过站立来做您想做的事情(并确保您的两种类型规范对齐;如果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)的实例上调用它。这是很麻烦的,因为它作用于枚举类型的所有实例。这就是生活。


推荐阅读