c# - 如何对列表框中的项目求和
问题描述
我想按方法对列表框中的项目求和,我想在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
{
...
}
解决方案
如果您知道您的所有项目ListBox
都是数字类型,那么您可以将集合转换为int
(或decimal
等)并获取Sum
using 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();
如果列表包含数字类型的混合,但它们都可以转换为相同的类型(如整数、双精度和小数),那么我们可以转换它们而不是强制转换:
// 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].TryParse
值item.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;
}
}
推荐阅读
- node.js - 将连接模型作为一个实体续集
- hiveql - Hive 查询语言,表达式不在分组中按键错误
- google-sheets - 在 Google 表格中,如何从多列 Vlookup 唯一数据
- api - dotnet 核心中的 API 版本控制
- android - 在生物识别指纹弹出窗口后面获取黑屏而不是主屏幕
- indexing - 如何索引两个不同的图表以始终从零开始
- excel - 每次更改值时如何调用Excel函数?
- snakemake - snakemake 随机将输出识别为不完整
- android - 底部的 Instagram 选项菜单
- javascript - Lite-server 无法启动,原因是“Unexpected token ...”