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());