The problem
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 solution
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.
using System;
public enum Colors
{
White,
Red,
Blue,
Green
}
// 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;
}
}
class Test
{
static
void Main()
{
Colors c = Colors.Red;
Console.WriteLine(c.IsWhite()); //
False
Console.WriteLine(c.IsRedOrBlue()); // True
Console.ReadKey();
}
}
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.