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

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, как я делаю во второй строке, преобразование дает мне ошибку, которую я не могу понять.

the error

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


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

GSMModemTypeConstants s_type = (GSMModemTypeConstants)System.Enum.Parse(
    typeof(GSMModemTypeConstants), comboBox2.Text);`

person Christos Karapapas    schedule 29.03.2012    source источник
comment
возможный дубликат Convert.ChangeType и преобразование в перечисления?   -  person BrokenGlass    schedule 29.03.2012
comment
Enum.ToObject() вместо Convert.ChangeType в строке я получаю сообщение об ошибке?   -  person Christos Karapapas    schedule 29.03.2012
comment
Если у вас есть решение вашей собственной проблемы, сделайте его ответом, чтобы люди в будущем быстрее находили ответ. Нет никаких ограничений на количество повторений для любого ответа. И, пожалуйста, избегайте использования [решено] в названии.   -  person gunr2171    schedule 16.12.2013


Ответы (1)


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

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

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

person Kosta    schedule 29.03.2012
comment
на самом деле это строка, перечисление содержит список моделей модемов. Я только что нашел решение своей проблемы, ее решил Enum.Parse. В любом случае спасибо за ваш ответ! - person Christos Karapapas; 30.03.2012