我刚刚收集了一些相关知识,似乎很难理解以下情况。
我有2节课。一个有Main
方法,另一个有两个Extension Methods
,如下所示。
有主要课程
class Program
{
static void Main(string[] args)
{
string uuu = "214";
Console.WriteLine(uuu.SplitMe().AddMe());
Console.ReadKey();
}
}
扩展类
static class ExtensionClass
{
public static char[] SplitMe(this string value)
{
return value.ToCharArray();
}
public static long AddMe(this char[] value)
{
int sum = 0;
for (int i = 0; i<value.Length ; i++)
{
sum += Convert.ToInt32(value[i]);
}
return sum;
}
}
我期待着,在下面一行
Console.WriteLine(uuu.SplitMe().AddMe());
uuu.SplitMe()
的输出为{'2','1','4'}的char[]
以及要打印为7(2 + 1 + 4)的完整行的结果,但它在我的控制台上是151。你能详细说明它的计算方法吗?
感谢。
答案 0 :(得分:8)
问题是System.Char
'2'
值的整数值为50,而不是2.因此,您要求{'2','1','4'}
求和,其值为{{1} },然后变为151.
您可以通过以下方式将字符转换为与其值匹配的数字:
{50, 49, 52}
但是,如果传递包含非数字字符的字符串,则会引发异常。
答案 1 :(得分:1)
包含char
的{{1}}的值不是2,而是50,因为它在ASCII table中的位置用作其值;其他数字也是如此,这解释了意想不到的结果。
答案 2 :(得分:0)
Convert.ToInt32
不会转换数字字符串值,而是the specified Unicode character to the equivalent 32-bit signed integer。
答案 3 :(得分:0)
因为ascii值2为50 1是49且4是52.所以它正在添加这些值..
您需要更改代码
public static long AddMe(this char[] value)
{
int sum = 0;
for (int i = 0; i < value.Length; i++)
{
sum += value[i]-48;
}
return sum;
}
或者你也可以这样做
sum += int.Parse(value[i].ToString());