Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка Convert.ChangeType при преобразовании из строки в GSMModemTypeConstants

Автор вопроса: Christos KarapapasОтветов: 1
comboBox2.DataSource = Enum.GetValues(typeof(GSMModemTypeConstants));
GSMModemTypeConstants s_type = (GSMModemTypeConstants)Convert.ChangeType(
    comboBox2.Text, typeof(GSMModemTypeConstants));

В первой строке пользователь выбирает тип своего модема из поля со списком, которое получает список доступных модемов из Enum GSMModemTypeConstants. Во второй строке я хочу передать выбранный тип модема в s_type, который позже будет использоваться методом, который фактически отправляет SMS.

Когда я вручную устанавливаю s_type, все работает идеально, например:

GSMModemTypeConstants s_type = GSMModemTypeConstants.gsmModemSonyEricsson;
// OR
GSMModemTypeConstants s_type = GSMModemTypeConstants.gsmModemNokia;

Но когда я пытаюсь получить выбор из comboBox и установить s_type, как я делаю во второй строке, преобразование дает мне ошибку, которую я не могу понять.

Я неправильно обрабатываю метод Convert.ChangeType? Если это не моя вина, то есть ли другой способ преобразовать тип из строки во что-то другое, кроме Convert.ChangeType?


Решение У меня все еще нет необходимой репутации, чтобы ответить на этот вопрос ниже, поэтому вот код...

GSMModemTypeConstants s_type = (GSMModemTypeConstants)System.Enum.Parse(
    typeof(GSMModemTypeConstants), comboBox2.Text);`
  • возможный дубликат Convert.ChangeType и преобразование в перечисления? BrokenGlass 29.03.2012
  • Enum.ToObject() вместо Convert.ChangeType в строке я получаю сообщение об ошибке? Christos Karapapas 29.03.2012
  • Если у вас есть решение вашей собственной проблемы, сделайте его ответом, чтобы люди в будущем быстрее находили ответ. Нет никаких ограничений на количество повторений для любого ответа. И, пожалуйста, избегайте использования [решено] в названии. gunr2171 16.12.2013

visual-studioenumssmsgsm

Ответы

Ответ 1 · рейтинг 1 · Kosta

Если comboBox2.Text имеет число (целое число), вы должны сначала преобразовать это значение в int, а затем привести его к GSMModemTypeConstants, например:

int modemType = int.Parse(comboBox2.Text));
GSMModemTypeConstants s_type = (GSMModemTypeConstants)modemType;

Или преобразуйте comboBox2.SelectedItem в свое перечисление.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы