C# 关于可拓方法的一些认识

C# 关于可拓方法的一些认识,c#,extension-methods,C#,Extension Methods,我只是收集了一些有关的知识,似乎对下面的场景了解很少 我有两门课。一个有Main方法,另一个有两个扩展方法,如下所示 具有主功能的类 class Program { static void Main(string[] args) { string uuu = "214"; Console.WriteLine(uuu.SplitMe().AddMe()); Console.ReadKey

我只是收集了一些有关的知识,似乎对下面的场景了解很少

我有两门课。一个有
Main
方法,另一个有两个
扩展方法,如下所示

具有主功能的类

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;
        }
    }
uuu.SplitMe()
的输出为{2'、'1'、'4'}的
char[]
,完整行的结果打印为7(2+1+4),但在我的控制台上是151。你能详细说明一下它是如何计算的吗


谢谢。

问题是
'2'
System.Char
值的整数值是50,而不是2。同样地,您对
{'2'、'1'、'4'}
求和,它们的值为
{50、49、52}
,然后变成151

您可以通过以下方式将字符转换为与其值匹配的数字:

sum += int.Parse(value[i].ToString());

但是,如果传递的字符串包含非数字字符,则会引发异常。

包含
2
字符的值不是2,而是50,因为它在中的位置用作其值;其他数字也是如此,这解释了意外结果。

Convert.ToInt32
不会转换数字字符串值,但是。

因为ascii值2是50,1是49,4是52。因此,它正在添加这些值

您需要更改代码

公共静态长地址(此字符[]值)
{
整数和=0;
for(int i=0;i

或者你也可以这样做

sum += int.Parse(value[i].ToString());

这与扩展方法无关,而是“2”的值不是2。如果将“2”转换为数字,则会得到字母“2”的ACII代码。如果要解析数字,请使用
Int32.parse
@thefiloe.NET通常使用Unicode字符集以及UTF-16和UTF-8编码。如果显式使用ASCII转换方法(或依赖于其数值等效性,但这会导致ASCII不支持的字符出错),则只能获取ASCII代码。如果执行类似(int)“2”的操作,则将获取ACII代码。
sum += int.Parse(value[i].ToString());