在C#中扩展枚举

Jos*_*orp 5 .net c# extension-methods enums

我想知道我是否可以在C#中扩展Enum类型以实现我的自定义Enum.GetValues(类型)并将其称为Enum.GetMyCustomValues(type)

我试图实现这样的事情:

public static bool IsFlagSet<T>(this T value, T flag) where T : Enum
{
    return (value & flag) != (T)0;
}
Run Code Online (Sandbox Code Playgroud)

但它无法完成......我可以做任何工作吗?干杯

Yur*_*ich 4

扩展适用于实例,而不是创建静态方法。您可以使用扩展基本枚举public static void MyExtensions(this Enum value)。但这仍然只会在您创建的 Enum 实例上创建方法。添加静态方法(就像您在类外部讨论的那样)的唯一方法是该类是分部类。

编辑:为了做你想做的事情,我写了以下内容

public static bool IsFlagSet<T>(this Enum value, Enum flag)
{
    if (!typeof(T).IsEnum) throw new ArgumentException();
    if (value == flag) return true;
    return ((int)Enum.Parse(typeof(T), value.ToString()) &
        (int)Enum.Parse(typeof(T), flag.ToString())) != 0;
}
Run Code Online (Sandbox Code Playgroud)

*警告,这种方法在使用之前需要仔细考虑,我希望有更好的方法来做到这一点。

  • 不需要通用约束 (2认同)