Неявно типизированный массив объектов и переменная

У меня есть то, что мне кажется неявно типизированным массивом объектов и переменными разных типов (string, int). При нажатии кнопки в моей форме я могу отобразить сообщение для каждого элемента массива. Но я хотел бы иметь возможность добавлять каждый из этих элементов в список. Последняя версия моего кода (см. ниже после множества разных попыток) вызвала ошибку "Ошибка 1 Использование неназначенной локальной переменной 'x'"

Как я могу добавить каждое из этих значений разных типов в список?

Спасибо

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TheWriteLineMethodForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string x;
            Object[] values = { true, 12.632, 17908, "stringValue",
                                 'a', 16907.32m };
            foreach (var value in values)
                //Console.WriteLine(value);
                //    MessageBox.Show(value.ToString());
                x = value.ToString();
                listBox1.Items.Add(x);

        }
    }
}

person Joe Pineda    schedule 24.07.2015    source источник
comment
Используйте блок { ... } в своем foreach; отступа недостаточно. Объявите x только внутри этого блока, возможно, с var. Не объявляйте x в верхней части тела метода.   -  person Jeppe Stig Nielsen    schedule 24.07.2015
comment
Связано: stackoverflow.com/a/10017199/380384   -  person John Alexiou    schedule 24.07.2015
comment
Спасибо вам всем. Скобки... вот и все!   -  person Joe Pineda    schedule 24.07.2015


Ответы (1)


Серьезный сбой в вашем коде, вы забыли скобки

    foreach (var value in values)
        //Console.WriteLine(value);
        //    MessageBox.Show(value.ToString());
        x = value.ToString();
        listBox1.Items.Add(x);

Итак, ваш код эквивалентен

string x;
foreach (var value in values) { x = value.ToString(); }
listBox1.Items.Add(x);

Когда вы делаете свой listBox1.Items.Add(x), он добавляет только последнее значение "16907,32 м"

Я должен сказать, что самый простой способ - использовать

values.ToList().ForEach(x => listeBox1.Items.Add(x));
person Maxime Porté    schedule 24.07.2015
comment
Зачем копировать весь массив в новый List<>? Если вам действительно нравится метод ForEach (многим он не нравится), то просто скажите Array.ForEach(values, listBox1.Items.Add);. Или если вам нужно добавить строки, то Array.ForEach(values, x => listBox1.Items.Add(x.ToString()));. Еще одна вещь, которую следует учитывать, это то, что listBox1 может иметь метод AddRange, который является естественным для использования. - person Jeppe Stig Nielsen; 24.07.2015