首页 > 解决方案 > 如何对列表框中的项目求和

问题描述

我想按方法对列表框中的项目求和,我想在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
    {
      ...
    }

标签: c#

解决方案


如果您知道您的所有项目ListBox都是数字类型,那么您可以将集合转换为int(或decimal等)并获取Sumusing System.LinqCast()请注意,如果列表中的项目不是我们尝试转换为的类型,这将在方法中引发异常:

// 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(); 

如果列表包含数字类型的混合,但它们都可以转换为相同的类型(如整数、双精度和小数),那么我们可以转换它们而不是强制转换:

// 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();

如果任何类型是非数字的,那么您必须在获得总和之前测试它们是否可以转换。一种方法是使用[numericType].TryParseitem.ToString()进行转换。这个方法很方便,因为它返回true项目是否可以转换,并将out参数设置为转换后的值。如果您int只需要值,请使用int.TryParse. 如果您想要更多数字类型,请尝试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;
    }
}

推荐阅读