求和列表中的整数范围

本文关键字:整数 范围 列表 求和 | 更新日期: 2023-09-27 18:11:29

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

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

求和列表中的整数范围

方法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));

而不假设前两项是字符串

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

非常容易:

list.Skip(2).Select(int.Parse).Sum();
var sum = _lstr.Skip(2).Sum(s => int.Parse(s));
 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
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;