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)
但它无法完成......我可以做任何工作吗?干杯
扩展适用于实例,而不是创建静态方法。您可以使用扩展基本枚举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)
*警告,这种方法在使用之前需要仔细考虑,我希望有更好的方法来做到这一点。