День сорок пятый. #TipsAndTricks
4. Добавление методов к перечислениям
Определить метод как часть перечислимого типа напрямую невозможно. Однако это ограничение можно обойти при помощи методов расширения. Рассмотрим упоминавшееся ранее перечисление дней недели (см. день сорок третий):
4. Добавление методов к перечислениям
Определить метод как часть перечислимого типа напрямую невозможно. Однако это ограничение можно обойти при помощи методов расширения. Рассмотрим упоминавшееся ранее перечисление дней недели (см. день сорок третий):
[Flags]Для добавления методов к перечислению нужно определить статический класс с методами расширения:
public enum Days
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
static class DaysExtensionsТеперь эти методы можно использовать, вызывая их из экземпляра перечисления:
{
static Days GetWorkdays(this Days days)
{
// 62 – сумма значений элементов от Monday до Friday
Enum.TryParse("62", true, out days);
return days;
}
public static Days GetWeekends(this Days days)
{
// 65 – сумма значений элементов Sunday и Saturday
Enum.TryParse("65", true, out days);
return days;
}
}
var d = Days.None;
Console.WriteLine("Рабочие дни: {0}", d.GetWorkdays());
Console.WriteLine("Выходные: {0}", d.GetWeekends());
// Вывод:
// Рабочие дни: Monday, Tuesday, Wednesday, Thursday, Friday
// Выходные: Sunday, Saturday