Member 12349103 Ответов: 1

C# winform не может привести объект типа 'system.string' к типу 'item'.


У меня есть проект, и я получаю эту ошибку. Невозможно привести объект типа 'System.Строка' для ввода 'Item'.

Ошибка находится в этой строке

var item = (Item)comboBox1.SelectedItem;

Я перепробовал все, кроме правильного.

полный код

<pre>public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        

        private void Form1_Load(object sender, EventArgs e)
        {
            var itemList = new List<Item>()
            {
                new Item() { Text = "L", Value = 1.75M },
                new Item() { Text = "US fl oz", Value = 1.698M }
            };

            comboBox1.DataSource = itemList;
            comboBox1.DisplayMember = "Text";
            comboBox1.ValueMember = "Value";

            comboBox2.DataSource = itemList;
            comboBox2.DisplayMember = "Text";
            comboBox2.ValueMember = "Value";
        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedItem != null)
            {
                var item = (Item)comboBox1.SelectedItem;
                MessageBox.Show($"{item.Text} - {item.Value}");


                textBox4.Text = ((Convert.ToDouble(textBox2.Text) / Convert.ToDouble(textBox3.Text)
                - Convert.ToDouble(textBox10.Text)) * Convert.ToDouble(textBox1.Text) / Convert.ToDouble(comboBox1.SelectedItem)).ToString("0.00");


            }
        }


Что я уже пробовал:

много искал в интернете и другой программный код

Karthik_Mahalingam

покажите свое Item код класса

1 Ответов

Рейтинг:
11

an0ther1

Свойство SelectedItem не возвращает значение Предмет, он возвращает an Объект. Ссылка MSDN для свойства SelectedItem - MSDN - ComboBox.Свойство SelectedItem[^]
Вы можете изменить свой код следующим образом;

// current text value
string strItemText = comboBox1.Text;
// convert the selected value to a Decimal value - always use TryParse & handle errors
decimal decItemValue;
if(!Decimal.TryParse(comboBox1.SelectedValue.ToString(), out decItemValue))
{ // invalid value - handle error
}

Используйте свой отладчик, между справочной информацией - MSDN великолепен, но есть и другие - и ваш отладчик, вы узнаете больше о кодировании, чем думаете

Ваш код;
var item = (Item)ComboBox.SelectedItem;
при попытке распаковать объект в тип значения это работает только для явных преобразований, если преобразование не является явным, то преобразование завершится неудачей - ссылка; Бокс и распаковка (руководство по программированию на C#) | Microsoft Docs[^]

C#-это язык с сильным типом, и вы должны использовать правильный тип для переменных - IMO. В этом случае я бы увидел переменную типа "var" и предположил, что вы ленивы. Существует использование для типа var, но это не так - см.; var (ссылка на C#) | Microsoft Docs[^]

с уважением


Member 12349103

Потерпите со мной, я новичок, добавляю строки к кнопке щелчка.
и получил ошибку "ССЫЛКА на объект не установлена на экземпляр объекта.
на линии
если (!десятичное число.Метод tryparse(поле combobox1.SelectedValue.ToString(), out decItemValue))

an0ther1

Используйте свой отладчик. "Ссылка на объект не установлена..." говорит вам, что одно из ожидаемых значений-это ничто.
Вставьте точку останова в код перед этой строкой, например в строку 'string strItemText'
Когда ваш код врывается в отладчик, проверьте каждое значение в непосредственном окне, введя свою команду (перед которой стоит вопросительный знак) и нажав клавишу enter - например;
? поле combobox1.SelectedValue

с уважением

Member 12349103

Я принимаю этот ответ, так как он направлен в направлении решения проблемы.

an0ther1

Спасибо. Рад помочь, удачи вам