C# - 如何从List中获取值的总和?

41

我想要对列表中的值求和。

例如: 我有一个包含4个值的列表1 2 3 4,我想将这些值相加,并在标签中显示结果

代码:

protected void btnCalculate_Click(object sender, EventArgs e)
{
    string monday;
    TextBox txtMonTot;
    List<string> monTotal = new List<string>();

    if (Application["mondayValues"] != null)
    {
        List<string> monValues = Application["mondayValues"] as List<string>;
        for (int i = 0; i <= gridActivity.Rows.Count - 1; i++)
        {
            GridViewRow row = gridActivity.Rows[i];
            txtMonTot = (TextBox)row.FindControl("txtMon");
            monday = monValues[i];
            monTotal.Add(monday);
        }
    }
}

10
这个函数是用于计算列表中所有数值的总和。 - I4V
4
既然这条评论得到了赞同,就应该提到,正如其他人所评论的那样,您需要引用System.Linq才能使用list.Sum()。 - OldDog
可能是C#对象列表,如何获取属性的总和的重复问题。 - Brian Hooper
4个回答

102

你可以使用Sum函数,但需要将字符串转换为整数,方法如下:

int total = monValues.Sum(x => Convert.ToInt32(x));

2
如果它们需要被求和,为什么一开始就是字符串列表呢? - Abhitalks
3
您可能不需要使用 lambda Sum(Convert.ToInt32) - Sayse
6
澄清一下,@Sayse没有错,语法也是正确的。问题在于Sum有两个重载,一个接受返回decimal的函数,另一个接受返回Nullable<decimal>的函数。使用方法组语法时,它无法确定Convert.ToDecimal匹配哪个重载。Lambda语法通过将Convert.ToDecimal包装在另一个方法中来解决这个问题,该方法始终返回decimal。 - Tim Copenhaver
2
请确保添加using System.Linq; - Justin Helps
只是为了澄清,如果您要使用List<T>().Sum()方法,您必须在代码顶部添加using System.Linq; - Gharbad The Weak

18

使用 Sum()

 List<string> foo = new List<string>();
 foo.Add("1");
 foo.Add("2");
 foo.Add("3");
 foo.Add("4");

 Console.Write(foo.Sum(x => Convert.ToInt32(x)));

输出:

10


我正想问同样的问题。 - NDJ
1
我真的不明白为什么这个答案会被踩!也许他看了这个问题http://meta.stackexchange.com/questions/17204/six-simple-tips-to-get-stack-overflow-reputation-fast并应用了第二条规则。 - makim

10
你可以使用LINQ来实现这个功能。
var list = new List<int>();
var sum = list.Sum();

如Roy Dictus所说,如果要对字符串列表进行操作,则需要进行转换。

list.Sum(str => Convert.ToInt32(str));

2
这个怎么样?
List<string> monValues = Application["mondayValues"] as List<string>;
int sum = monValues.ConvertAll(Convert.ToInt32).Sum();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接