【问题标题】:c# - How to get sum of the values from List?c# - 如何从列表中获取值的总和?
【发布时间】:2013-09-20 09:51:29
【问题描述】:

我想从列表中获取值的总和。

例如:我在列表中有 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);
        }
    }
}

有什么想法吗?提前致谢

【问题讨论】:

标签: c# asp.net


【解决方案1】:

这个怎么样?

List<string> monValues = Application["mondayValues"] as List<string>;
int sum = monValues.ConvertAll(Convert.ToInt32).Sum();

【讨论】:

    【解决方案2】:

    使用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

    【讨论】:

    【解决方案3】:

    您可以使用Sum 函数,但您必须将字符串转换为整数,如下所示:

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

    【讨论】:

    • 如果它们必须相加,为什么首先是字符串列表?
    • 你可能不需要 lambda Sum(Convert.ToInt32)
    • 澄清一下,@Sayse 没有错,语法是有效的。问题是 Sum 有两个重载,一个接受返回小数的 func,另一个接受返回 Nullable 的 func。使用方法组语法,它无法判断 Convert.ToDecimal 匹配哪个重载。 lambda 语法解决了将 Convert.ToDecimal 包装在另一个总是返回小数的方法中的问题。
    • 确保添加using System.Linq;
    【解决方案4】:

    您可以为此使用 LINQ

    var list = new List<int>();
    var sum = list.Sum();
    

    对于像 Roy Dictus 这样的字符串列表,你必须转换

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多