此代码返回int 49
IEnumerable<int> numbersList = numbers.Select(x => Convert.ToInt32(x));
int sum = numbersList.Sum();
数字变量是一个值为1的字符串。
如果我使用
numbers.Split(',').Select(x => Convert.ToInt32(x));
然后我得到了正确答案。我知道split传回一个字符串数组所以我使用了一个单值为1的字符串数组而不是分裂,这也是有用的。
string[] sa = new string[] { "1" }
我的问题是,是否有人知道为什么在字符串上使用select会返回错误的值?
感谢。
答案 0 :(得分:8)
当您使用numbers.Select()
时,您将字符串视为集合。它是一个集合,但不是子串的集合,而是一组字符。
您得到的结果与numbers
是一个字符数组相同,即{ '1' }
。
Convert.ToInt32('1')
的结果是'1'
的字符代码,即49。
答案 1 :(得分:2)
代码返回数字1的ASCII代码:
答案 2 :(得分:2)
第一种方法转换char&#39; 1&#39;到一个int,第二个转换字符串&#34; 1&#34;到一个int。第一个将返回49(该字符的ascii值),第二个将返回1.
您可以使用以下代码将表示int的char转换为int:
c - '0'
答案 3 :(得分:1)
在第一个示例中,lambda表达式中的x是Unicode字符。 Convert.ToInt32将指定的Unicode字符的值转换为等效的32位有符号整数。在你的情况下,这是49。
在第二种情况下,x是一个字符串。 Convert.ToInt32的工作方式不同,字符串将此字符串中包含的数字转换为实际的int表示形式,在本例中为1。
http://msdn.microsoft.com/pl-pl/library/ww9t2871(v=vs.110).aspx
http://msdn.microsoft.com/pl-pl/library/sf1aw27b(v=vs.110).aspx