如何在列表框中使用字符串对值进行求和?

时间:2017-08-01 11:54:17

标签: c# winforms

我只是想知道如何获得总价值。

这是列表框中的一个示例:

Soda - 30
Food - 50 

如何将30和50相加并在文本框中显示?请帮忙。 我添加到列表框的代码是:

listBox1.Items.Add("btnSoda.text");

我的按钮代码将获得总值:

int i = 0, result = 0;
while (i < listBox1.Items.Count)
{           
    result += Convert.ToInt32(listBox1.Items[i++]);
}

textboxtotal.Text = Convert.ToString((double)result)

运行程序并单击getTotal Value后显示错误:

  

发生了'System.FormatException'类型的未处理异常   mscorlib.dll中

2 个答案:

答案 0 :(得分:2)

我建议您为自己的项目使用自己的课程。像

这样的东西
public class Item
{
    public string Name { get; set; }
    public int Price { get; set; }

    public Item(string name, int price)
    {
        Name = name;
        Price = price;
    }
}

而不是

listBox1.Items.Add("btnSoda.text");

你必须写

List<string> lines = File.ReadAllLines("btnSoda.text");
List<Item> items = new List<Item>();

foreach(string line in lines)
{
    string[] parts = line.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
    string name = parts[0];
    int price = int.Parse(parts[1]);
    Item item = new Item(name, price);
    items.Add(item);
}

comboBox1.DataSource = items;

使用这段代码,您正在阅读文件并创建要在Item中显示的ComboBox项。优点是您拥有具有所需属性的特定项目,而不是每次要对其执行某些操作时必须解释的string

不要忘记设置组合框的DisplayMember属性name。否则,您将无法在ComboBox中看到项目的名称。

之后你可以使用

int sum = comboBox1.Items
                   .OfType<Item>()
                   .Sum(x => x.Price);

label1.Text = sum.ToString();

总结价格。

也许它似乎比其他答案复杂一点,但它是更清洁的方式。

一些优点

  • 当您初始化ComboBox而不是计算总和时,您会发现文本文件中的错误
  • 每次想要与他们合作时都不需要解释您的项目,因为您已经在开始时这样做了
  • 更容易理解和阅读:没有神奇的字符串或数字

答案 1 :(得分:1)

您可以使用Split()Sum()

var sum = listBox1.Items
         .OfType<string>()
         .Select(s => Convert.ToInt32(s.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1]))
         .Sum();

然后:

lbltotal.Text = sum.ToString();

此外,您可以稍微更改一下代码,它应该有效:

while (i < listBox1.Items.Count)
{           
    result += Convert.ToInt32(((string)listBox1.Items[i++]).Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1]);
}