LINQ对字符串使用Select返回奇怪的值
本文关键字:返回 Select 字符串 LINQ | 更新日期: 2023-09-27 18:08:21
这段代码返回整数49
IEnumerable<int> numbersList = numbers.Select(x => Convert.ToInt32(x));
int sum = numbersList.Sum();
number变量是一个值为1的字符串。
如果我使用
numbers.Split(',').Select(x => Convert.ToInt32(x));
然后我得到了正确的答案。我知道split传递回一个字符串数组,所以我使用了一个字符串数组,只有一个值为1,而不是分割,这也是有效的。
string[] sa = new string[] { "1" }
我的问题是有没有人知道为什么在字符串上使用select返回错误的值?
谢谢。
当您使用numbers.Select()
时,您将字符串视为集合。它是一个集合,但不是子字符串的集合,而是字符的集合。
您将得到与numbers
是字符数组(即{ '1' }
)相同的结果。
Convert.ToInt32('1')
的结果为'1'
的字符码,为49。
代码返回数字1的ASCII码:
http://www.asciitable.com/index/asciifull.gif第一个方法将字符'1'转换为int型,第二个方法将字符串"1"转换为int型。第一个将返回49(该字符的ascii值),第二个将返回1。
可以使用以下命令将表示int型的char转换为int型:
c - '0'
在第一个例子中,lambda表达式中的x是一个Unicode字符。转换。ToInt32将指定的Unicode字符的值转换为等效的32位带符号整数。在你的情况下是49。
第二种情况下,x是一个字符串。转换。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