2008-12-05 5 views
1

Предположим, у меня есть перечислениечто среда выполнения эквивалент C# квадратные скобки "типа отливать

[Flags] 
public enum E { 
    zero = 0, 
    one = 1 
} 

то я могу написать

E e; 
object o = 1; 
e = (E) o; 

и он будет работать.

НО, если я пытаюсь сделать это во время выполнения, как

(o as IConvertible).ToType(typeof(E), null) 

он будет бросать InvalidCastException.

Итак, есть ли что-то, что я могу вызывать во время выполнения, и он преобразует из int32 в enum, точно так же, как если бы я написал отливку, как указано выше?

+0

меты - Так как Q имеет дело только с перечислениями предлагает кому-то добавить «перечисление» к заголовку и/или тегам. – 2010-08-03 23:46:50

ответ

0

Как переменная выглядит так, что вы сохраняете результат этого преобразования? То есть с каким типом вы его заявляете?

Если вы хотите иметь переменную объекта, сделайте это так. Вместо null используйте Activator.CreateInstance создать экземпляр по умолчанию перечисления:

object o = Activator.CreateInstance(typeof(E)); 
+0

Я хочу, чтобы это был объект. То есть, в коробке перечислены. Дело в том, что этот тип неизвестен во время компиляции, поэтому я не хочу объявлять переменную «destination» с точным типом. – artem 2008-12-05 23:35:33

+0

Я вижу вашу проблему сейчас. На самом деле это не имеет никакого отношения к кастингу, как показывает мой код. Скорее, проблема заключается в создании экземпляра на основе типа времени выполнения. – 2008-12-05 23:39:44

0

Вы также можете использовать

Enum.Parse(typeof(E), (int)o)