У меня есть объект. Обычно это либо long
, либо string
, поэтому для упрощения кода предположим именно это.Как преобразовать произвольный объект в перечисление?
Мне нужно создать метод, который пытается преобразовать этот объект в предоставленный enum. Таким образом:
public object ToEnum(Type enumType, object value)
{
if(enumType.IsEnum)
{
if(Enum.IsDefined(enumType, value))
{
var val = Enum.Parse(enumType, (string)value);
return val;
}
}
return null;
}
Со строками это хорошо работает. С номерами он вызывает проблемы, потому что тип по умолчанию для перечисления по умолчанию - int
, а не long
и IsDefined
- throws a ArgumentException
.
Конечно, я могу сделать много проверок, конверсий или пробных уловов.
Я хочу, чтобы для этого был чистый и маленький код. Любые идеи, как сделать его читабельным и простым?
вы проверили http://stackoverflow.com/a/29489/395890 – AMember
Ну, я должен сделать это динамически (я не знаю, тип перечисления в компиляции время). Кроме того, как я уже сказал, 'IsDefined' - это не-go, потому что для меня это слишком сложно. –
Это хорошая привычка объяснять -1 голосов. Если что-то не так с вопросом, дайте мне знать ;-) –