Операции сложения/вычитания с ComboBox

Допустим есть класс, в котором содержится объект с типом Float, и он записывается в combobox1 и combobox2, есть TextBox1, который должен показать разницу между comboBox1 и comboBox2, чтобы это сделать, нужно вычислить какой из этих comboBox > и затем уже выполнить операцию (-). Данные, кстати, берутся из CSV файла, то есть, нужно, чтобы была проверка на цикличность, если пользователь выбрал 1, а потом выбрал другое. Спасибо заранее всем, кто откликнулся!

 List<CPU> cpus = CPUs.GetCPUValues(); // Polu4enie spiska CPU;
            foreach (CPU cpu in cpus) // dlya kajdogo CPU v liste CPU poly4it' spisok;
            {
                comboBox1.Items.Add($"| {cpu.Brand} | {cpu.Model} | {cpu.Benchmark}%"); // ComboBox1 = CPU;
                comboBox2.Items.Add($"| {cpu.Brand} | {cpu.Model} | {cpu.Benchmark}%"); // ComboBox2 = CPU;
            } 

// Sozdanie classa dlya vsex CPU;
        public static class CPUs
        {
            public static List<CPU> GetCPUValues()
            {
                string filePath = Path.Combine(Application.StartupPath, "CPU_UserBenchmarks.csv");
                using (var reader = new StreamReader(filePath))
                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                {
                    var records = new List<CPU>();
                    csv.Read();
                    csv.ReadHeader();
                    while (csv.Read())
                    {
                        var record = new CPU
                        {
                            Type = csv.GetField<string>("Type"),
                            Brand = csv.GetField<string>("Brand"),
                            Model = csv.GetField<string>("Model"),
                            Benchmark = csv.GetField<float>("Benchmark")
                        };
                        records.Add(record);
                    }
                    return records;
                }
            }
        }

        // Sozdanie classa dlya parsinga Type/Brand/Model/Benchmark'a CPU;
        public class CPU
        {
            public string Type { get; set; }
            public string Brand { get; set; }
            public string Model { get; set; }
            public float Benchmark { get; set; }
        }

Ответы (1 шт):

Автор решения: aepot

Ваш код немного можно улучшить.

1) Добавление элемента в комбобоксы можно сделать так

comboBox1.Items.Add(cpu);
comboBox2.Items.Add(cpu);

и переопределить ToString() у класса CPU

public class CPU
{
    public string Type { get; set; }
    public string Brand { get; set; }
    public string Model { get; set; }
    public float Benchmark { get; set; }

    public override string ToString() => $"| {Brand} | {Model} | {Benchmark}%";
}

ComboBox сам вызовет ToString() для отображения.

2) Создайте обработчик события ComboBox.SelectedIndexChanged и назначьте на этот обработчик события SelectedIndexChanged у обоих ComboBox.

private void ComboBoxCPU_SelectedIndexChanged(object sender, EventArgs e)
{
    CPU leftCPU = comboBox1.SelectedItem as CPU;
    CPU rightCPU = comboBox2.SelectedItem as CPU;
    float result = (float)Math.Abs((leftCPU?.Benchmark ?? 0.0f) - (rightCPU?.Benchmark ?? 0.0f));
    textBox1.Text = result.ToString();
}
→ Ссылка