对List中的一系列整数求和

时间:2013-04-30 19:46:50

标签: c# asp.net vb.net linq lambda

假设我有一个像这样的列表:

List<string> _lstr = new List<string>();

        _lstr.Add("AA");
        _lstr.Add("BB");
        _lstr.Add("1");
        _lstr.Add("7");
        _lstr.Add("2");
        _lstr.Add("5");

如果我不知道列表中有多少个整数,如何总结列表中的整数?可能是4,可能是10等等...我所知道的是前两项是字符串,其余是整数。

在这种情况下,所需的结果是 15

6 个答案:

答案 0 :(得分:5)

方法A 无条件地跳过前2个并假设其余的都是整数字符串:

var sum = _lstr.Skip(2).Select(int.Parse).Sum();

方法B 不做任何决定:

var sum = _lstr.Aggregate(0, (x, z) => x + (int.TryParse(z, out x) ? x : 0));

答案 1 :(得分:4)

不假设前两项是字符串

int sum = _lstr.Select(s => {int i; return int.TryParse(s,out i) ? i : 0; })
               .Sum();

答案 2 :(得分:1)

很容易:

list.Skip(2).Select(int.Parse).Sum();

答案 3 :(得分:1)

var sum = _lstr.Skip(2).Sum(s => int.Parse(s));

答案 4 :(得分:1)

 int num = 0; int sum  = 0;
 _lstr.ForEach(x => {Int32.TryParse(x, out num); sum +=num;});

只是为了证明如果Int32.TryParse失败,out var被重置为零

 _lstr.Add("AA");
 _lstr.Add("BB");
 _lstr.Add("1");
 _lstr.Add("7");
 _lstr.Add("2");
 _lstr.Add("5");
 _lstr.Add("CC");
 _lstr.Add("9");

 int num = 0; int sum  = 0;
 foreach(string s in _lstr)
 {
    bool result = Int32.TryParse(s, out num);
    Console.WriteLine("TryParse:" + result + " num=" + num);
 }

TryParse:False num=0
TryParse:False num=0
TryParse:True num=1
TryParse:True num=7
TryParse:True num=2
TryParse:True num=5
TryParse:False num=0
TryParse:True num=9

答案 5 :(得分:-5)

int sum=0,i=0;       
foreach(string s in mylist){
    //in case of non integers
    try{
        i=int.parse(s);//you can put convert or tryparse too here
    } catch(Exception ex) {
        i=0;
    }
    sum=sum+i;
}

return sum;