Попытка получить значение int из строки с помощью Enum :: Parse - PullRequest
2 голосов
/ 20 мая 2011

Я работаю с C ++ и .NET 1.1, и мне нужно разобрать строковые значения в соответствующие им значения int из перечислителя.

У меня есть перечислитель

__value static enum myEnum {
  VALUE1,
  VALUE2,
  VALUE3
};

, и япытаясь сделать что-то вроде

int value = (int)Enum::Parse(__typeof(myEnum), stringToParse);

или

int value = (myEnum)Enum::Parse(__typeof(myEnum), stringToParse);

, за исключением, конечно, что Enum::Parse возвращает Object*, и я просто не могу понять, какбросьте этот объект в int.

Что я делаю не так?(Что-то связанное с управляемыми расширениями, как в прошлый раз, когда я застрял?)

1 Ответ

1 голос
/ 20 мая 2011

Это должен быть просто unbox - хотя вы могли бы хотеть распаковать в enum и затем разыграть. В C # что-то вроде;

int value = (int)(myEnum)Enum.Parse(typeof(myEnum), stringToParse);

Не уверен, как это выглядит в C ++.

В C # следующие также работают, но я не могу гарантировать, как формально:

int value = (int)Enum.Parse(typeof(myEnum), stringToParse);

Обратите внимание, что в приведенном выше тексте я предполагаю, что myEnum использует Int32 в качестве базового типа. Если это , а не , то вам нужно настроить его, чтобы распаковать как правильный базовый тип first .

Проходя через отражатель, я получаю:

 Int32 __gc* value = *static_cast<__box Int32*>(
   *static_cast<__box myEnum*>(Enum::Parse(__typeof(myEnum), stringToParse)));
...