总和在列出一系列的整数的

问题描述:

比方说,我有一个这样的名单:总和在列出一系列的整数的

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等等......我所知道的只是前两项是字符串,其余都是整数。

在这种情况下,期望的结果是。

+0

你试过了什么?你有没有试图自己解决这个问题?你知道如何验证一个字符串是否可以被解析为一个整数? – Servy 2013-04-30 19:50:02

方法A无条件跳过前2并假定其余全部都是整数字符串:

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

方法B使没有assumtions:

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

很容易:

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

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

未做假设前两项是字符串

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

+1为无假设接近。假设经常是错误的 – 2013-04-30 19:56:31

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

只是为了证明这一点,如果Int32.TryParse失败了变量被重置了零

_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 
+0

,但在假num = 0的情况下,尝试在最后一个整数后面添加另一个字符串和另一个整数 – Steve 2013-04-30 19:56:29

+0

道歉,它是out,所以它必须更改值 - 你确信它将它设置为0 ?我无法找到任何有关文件。 – VisualMelon 2013-04-30 19:58:15

+0

@Steve我不是downvoter,但我个人不喜欢使用Linq的副作用。 – 2013-04-30 20:00:41

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; 
+0

因为它不起作用。 OP有一个字符串列表,不是所有的都是整数。 – Servy 2013-04-30 20:11:50

+0

你看到编辑答案之前downvoting我 – Alok 2013-04-30 20:12:31

+0

是的。仍然不起作用。 – Servy 2013-04-30 20:12:48