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返回错误的值?

谢谢。

LINQ对字符串使用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