Как суммировать элементы в списке - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу суммировать элементы в списке по методу, и я хочу напечатать результат на label1.

Код:

void sum()
    {
       ...
    }

    int index = 0;
    string[] numbers= new string[10];


    private void button1_Click(object sender, EventArgs e) // Add Button
    {
        if (index < numbers.Length)
        {
            numbers[index] = textBox1.Text;
            listBox1.Items.Add(numbers[index++]);
        }
    }
    private void button2_Click(object sender, EventArgs e) // Sum calc button
    {
      ...
    }

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Если вы знаете, что все элементы в вашем ListBox являются числовыми c типами, то вы можете просто привести коллекцию к int (или decimal и т. Д. c.) И получить Sum используя System.Linq. Обратите внимание, что это вызовет исключение в методе Cast(), если элемент в списке не относится к тому типу, к которому мы пытаемся привести:

// Add integers to listbox
listBox1.Items.AddRange(new object[] { 1, 2, 3, 4, 5 });

// Get the sum using Linq
int sum = listBox1.Items.Cast<int>().Sum(); 

Если список содержит сочетание чисел c типов, но все они могут быть преобразованы в один и тот же тип (например, целые, двойные и десятичные), тогда мы можем преобразовать их вместо приведения:

// Initialize with an int, double, single, and decimal
listBox1.Items.AddRange(new object[] {1, 2.1, 3.2f, 4.3m});

// Use 'Convert' instead of 'Cast' (after casting to the base object type):
decimal sum = listBox1.Items.Cast<object>().Select(Convert.ToDecimal).Sum();

Если какой-либо из типов не является числовым c, тогда вам нужно проверить, можно ли их конвертировать, прежде чем получить сумму. Один из способов сделать это - использовать [numericType].TryParse для значения item.ToString() для преобразования. Этот метод удобен тем, что возвращает true, если элемент может быть преобразован, и устанавливает для параметра out преобразованное значение. Если вам нужны только значения int, используйте int.TryParse. Если вы хотите больше чисел c типов, попробуйте decimal.TryParse:

// Initialize the array so it includes a non-numeric string type
listBox1.Items.AddRange(new object[] {"1", 2, 3.1, 4.2f, 5.6m});

decimal sum = 0;

foreach (var item in listBox1.Items)
{
    decimal temp;
    if (decimal.TryParse(item.ToString(), out temp))
    {
        sum += temp;
    }
}
0 голосов
/ 20 апреля 2020

Вы можете использовать функцию UpdateLabel, чтобы сделать значение метки суммой.

    private int Sum()
    {
        var sum = 0;

        for(int i = 0; i < listBox1.Items.Count; i++)
        {
            if(int.TryParse(listBox1.Items[i].ToString(), out var n))
            {
                sum += n;
            }
        }

        return sum;
    }

    private void UpdateLabel()
    {
        label1.text = Sum().ToString();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...