Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extending Enum in C#

I was wondering whether or not I can extend the Enum type in C# to implement my custom Enum.GetValues(type) and call it like Enum.GetMyCustomValues(type)

I am trying to implement something like this:

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

but it cannot be done... any work arounds I can do? Cheers

like image 527
Joshscorp Avatar asked Oct 30 '09 02:10

Joshscorp


2 Answers

Extensions work on instances, not for creating static methods. You can extend the base Enum using public static void MyExtensions(this Enum value). But this would still only create methods on Enum instances you create. The only way to add static methods like you're talking about externally for a class is if the class is a partial class.

Edit: to do something like you want I wrote the following

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;
}

*warning, this method needs to be thought out more prior to use, I'm hoping there is a better way to do it.

like image 128
Yuriy Faktorovich Avatar answered Sep 22 '22 17:09

Yuriy Faktorovich


I think you may be looking for extension methods for enums. Here's a starting link: http://pietschsoft.com/post/2008/07/C-Enhance-Enums-using-Extension-Methods.aspx

like image 23
FrustratedWithFormsDesigner Avatar answered Sep 22 '22 17:09

FrustratedWithFormsDesigner