In C#, enums are simple value types which just contain a bunch of constants. No other type of member can be included.
Given that C# was influenced by C and C++, this is no surprise as enums in those languages only contain constants as well. However, Java allows enums to include methods so how can we do something similar in C#?
The answer is to use extension methods which were introduced in C# 3.0.
Here's an example where we (effectively) add some methods to a Colors enum.
public enum Colors
// extension methods for the Colors enum
public static class ColorsExtensions
public static bool IsWhite(this Colors c)
return c == Colors.White;
public static bool IsRedOrBlue(this Colors c)
return c == Colors.Red || c == Colors.Blue;
static void Main()
Colors c = Colors.Red;
Console.WriteLine(c.IsWhite()); // False
Console.WriteLine(c.IsRedOrBlue()); // True
Is Microsoft likely to add methods to enums in future?
Although this feature is often requested, I would be surprised if they do given that this easy workaround exists.
However, if 'extension properties' were added to the language (a much more likely event), then we could use the same technique to add properties to enums as well.