Недавно понадобилось сделать перечисление со строками. Перечисления в .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 он корректно преобразовал нужное нам значение.
Комментариев нет:
Отправить комментарий