что такое время выполнения эквивалентно приведению типа c # в скобках - PullRequest
1 голос
/ 06 декабря 2008

предположим, у меня есть перечисление

[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, так же, как если бы я написал приведение, как указано выше?

Ответы [ 3 ]

4 голосов
/ 06 декабря 2008

object o = 1;
object z = Enum.ToObject(typeof(E), o); 

0 голосов
/ 07 декабря 2008

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

Enum.Parse(typeof(E), (int)o)
0 голосов
/ 06 декабря 2008

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

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

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