LINQ在对字符串使用Select时返回奇怪的值

3

这段代码返回整数49

IEnumerable<int> numbersList = numbers.Select(x => Convert.ToInt32(x));

int sum = numbersList.Sum();

变量"numbers"是一个字符串,其值为1。
如果我使用:
numbers.Split(',').Select(x => Convert.ToInt32(x));

然后我得到了正确的答案。我知道split返回一个字符串数组,因此我使用了一个带有单个值1的字符串数组,而不是拆分,这也起作用。

string[] sa = new string[] { "1" }

我的问题是,有人知道为什么在字符串上使用select返回错误的值吗?

谢谢。


2
它将字符 1 转换为整数,该整数在 ASCII 表中为 49。 - Ulugbek Umirov
1
@Guffa numbers 变量是一个字符串,其值为 1。 - Rawling
1
@Rawling:啊,现在我明白了,第一段代码和第二段不同…… - Guffa
"1".Select(x => x).ToArray() == new char[]{ '1' }, 通过 Convert.ToInt32 变成了 Convert.ToInt32('1') == Convert.ToInt32(49) == 49 - flindeberg
谢谢你们! - user3733107
显示剩余3条评论
4个回答

8
当您使用numbers.Select()时,您将字符串视为一个集合。它确实是一个集合,但不是子字符串的集合,而是字符的集合。
您得到的结果与numbers是字符数组时相同,即{'1'}Convert.ToInt32('1')的结果是字符'1'的字符代码,即49。

2
第一种方法将字符'1'转换为整数,第二种方法将字符串"1"转换为整数。第一个会返回49(该字符的ASCII值),而第二个会返回1。
您可以使用以下方法将表示整数的字符转换为整数:
c - '0'

2

如果您能解释一下为什么,那将会很有帮助。 - Rawling

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接