Заметки на полях
дневник заведен 13-08-2012
постоянные читатели [1]
закладки:
цитатник:
дневник:
интересы [9]
07-09-2012 12:52 немного про enum'ы
простые и совсем нехитрые тонкости

Задача: много много разных энамов, схема работы - похожая для всех, в проекте - сплошные switch'и
Как-то надо было побороть это безобразие, желательно просто и красиво - решено было воспользоваться generic методами

В итоге есть класс, который содержит в себе Dictionary<string, int> (ведь все enum'ы на самом деле int)
и есть метод, который возвращает значение определенного enum'a

Так вот, первая тонкость, с которой столкнулась - нельзя поставить ограничение Enum на тип generic метода
То есть, нельзя писать так (по крайней мере, в Net 2.0):

public T GetSortOrder<T>(T defaultValue) where T : Enum

Можно поставить ограничение на тип, выбрав один из интерфейсов, которые реализует Enum, например

public T GetSortOrder<T>(T defaultValue) where T : IConvertible

(это если необходимо внутри метода воспользоваться методами данного интерфейса)

Можно вообще не ставить ограничения на тип, НО обязательно стоит тогда первым же делом проверить внутри метода свойство typeof(T).IsEnum и по необходимости выбросить исключение или же обработать как-то еще

Далее, не смотря на то, что явного ограничения на тип Enum нет, можно воспользоваться методами этого класса вот таким образом:

Enum.IsDefined(typeof(T), value) - проверяет, определено ли значение в энаме
(T)Enum.ToObject(typeof(T), intValue) - преобразует из целого типа в типа энама
и т.п.
Ну а поскольку мы же проверили и убедились в самом начале метода, что тип, с которым вызвали наш метод, точно энам, то это вполне безопасно

Ваш комментарий:
Камрад:
Гость []
Комментарий:
[смайлики сайта]
Дополнительно:
Автоматическое распознавание URL
Не преобразовывать смайлики
Cкрыть комментарий
Закрыть