关于扩展方法的一些理解

Ima*_*mad 3 c# extension-methods

我刚刚收集了一些知识,似乎很难理解以下情况.

我有2节课.一个有Main方法,另一个有两个Extension Methods如下.

有主要的类

class Program
    {
        static void Main(string[] args)
        {
            string uuu = "214";
            Console.WriteLine(uuu.SplitMe().AddMe());
            Console.ReadKey();
        }
    }
Run Code Online (Sandbox Code Playgroud)

扩展类

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我期待着,按照以下方针行事

Console.WriteLine(uuu.SplitMe().AddMe());
Run Code Online (Sandbox Code Playgroud)

的输出uuu.SplitMe()char[]的{"2","1","4"}和完整线的结果将被打印为7(2 + 1 + 4),但它是151我的控制台上.你能详细说明它的计算方法吗?

谢谢.

Ree*_*sey 8

问题是System.Char'2'的整数值为50,而不是2.因此,您正在求和{'2','1','4'},其值为{50, 49, 52},然后变为151.

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

sum += int.Parse(value[i].ToString());
Run Code Online (Sandbox Code Playgroud)

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