Недавно понадобилось сделать перечисление со строками. Перечисления в .NET поддерживают только численные типы (byte, sbyte, short, ushort, int, uint, long, ulong) но к сожалению не поддерживают конструкцию типа
На помощь пришел Typesafe Enum паттерн. Одна из его возможных реализаций приведена ниже.
enum ImagePath : string { BIcon = "Images/BIcon.jpg", PIcon = "Images/PIcon.jpg", GIcon = "Images/GIcon.jpg" }Но выход есть!
На помощь пришел Typesafe Enum паттерн. Одна из его возможных реализаций приведена ниже.
public sealed class ImagePath { private string _path; // Выносим путь "Images/" в отдельное поле private const string _PathToImage = "Images/"; public static readonly ImagePath BIcon = new ImagePath(_PathToImage + "BIcon.jpg"); public static readonly ImagePath PIcon = new ImagePath(_PathToImage + "PIcon.jpg"); public static readonly ImagePath GIcon = new ImagePath(_PathToImage + "GIcon.jpg"); private ImagePath(string path) { _path = path; } public override string ToString() { return _path; } }Создаем запечатанный класс, на каждое значение перечисления создаем статическое, только для чтения, поле, которое инициализируем в приватном конструкторе (чтобы не было возможности из вне создавать экземпляр этого класса). В добавок перегружаем метод ToString(), чтобы при вызове ImagePath.BIcon он корректно преобразовал нужное нам значение.
Комментариев нет:
Отправить комментарий