Если вы знаете, что все элементы в вашем 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;
}
}