Ошибка Convert.ChangeType в преобразовании из «строки» в «GSMModemTypeConstants» - PullRequest
0 голосов
/ 29 марта 2012
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);`

1 Ответ

1 голос
/ 30 марта 2012

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

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

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

...