C# ToString如何与索引器一起工作?

C# ToString如何与索引器一起工作?,c#,indexing,tostring,C#,Indexing,Tostring,我有以下代码: int age = 47; int firstDigit = age.ToString()[0]; Console.WriteLine($"firstDigit: { firstDigit }"); 如果我运行这些代码,我会得到firstDigit的52 在这段代码中会发生什么来获得值52 怎样才能得到正确的年龄第一位数字(=4)?52是数字4的UNICODE/ASCII值,您真正要做的是将年龄转换为字符串“47”,并将第一个字符“4”作为一个整数,即52

我有以下代码:

int age = 47; 
int firstDigit = age.ToString()[0];
Console.WriteLine($"firstDigit: { firstDigit }");
如果我运行这些代码,我会得到firstDigit的
52

在这段代码中会发生什么来获得值52


怎样才能得到正确的年龄第一位数字(=4)?

52是数字4的UNICODE/ASCII值,您真正要做的是将年龄转换为字符串“47”,并将第一个字符“4”作为一个整数,即52-只需使用char与“4”保持一致52是4的ASCII值。要获得
4
,您需要以下内容:

int age = 47; 
char firstDigit = age.ToString()[0];
Console.WriteLine($"firstDigit: { firstDigit }");
请记住,数字4和字符值“4”之间存在很大差异。如果你真的想要第四个,你可以这样做:

int age = 47; 
int firstDigit = age.ToString()[0] - '0';
Console.WriteLine($"firstDigit: { firstDigit }");
它依赖于这样一种理念,即无论您使用何种字符系统,数字都将始终以0开头的顺序表示。

将其解析为字符串:

int age = 47;
Console.Write(age.ToString()[0]);

谢谢你的回答。我不知道ToString会将其转换为ascii码。现在我知道了,它打印52是合乎逻辑的。@Jarne
ToString()
将整个数字转换为字符串,因为它当然会;名字就是这么说的。然后,当您查看字符串的任何单个索引位置时,您就有了一个字符。在这种情况下,字符值仍然是
'4'
。它将该字符赋给一个整数变量,该变量给你一个ascii码。顺便说一句:更快的方法(大约50%)是
intfirstdigit=age;而((firstDigit/10)>0{firstDigit/=10;}
(以5000个随机非负整数值为基准)。