2011-09-23 122 views
1

我刚刚开始学习C#。我正在读一本书,其中一个例子是这样的:Int32.Parse究竟做了什么?

using System; 

public class Example 
{ 
    public static void Main() 
    { 
     string myInput; 
     int myInt; 

     Console.Write("Please enter a number: "); 
     myInput = Console.ReadLine(); 
     myInt = Int32.Parse(myInput); 

     Console.WriteLine(myInt); 
     Console.ReadLine(); 
    } 
} 

当我运行并输入说“十二五”并回车,我得到“不正确的格式输入字符串”的错误。我不明白的是,我把字符串myInput转换为一个数字不是我?微软表示,In32.Parse'将数字的字符串表示转换为其32位有符号整数等价物。'那么,当我输入五个字时,它怎么不起作用呢?它应该被转换为一个整数不应该...困惑。谢谢你的建议。

+0

它只支持字符串形式的数字 – kenny

+0

您必须输入数字'5' – NullUserException

回答

1

表示数字的词不转换;它将表示数字的字符转换为实际的数字。

字符串中的“5”以ASCII(或unicode)字符表示形式存储在内存中。5的ASCII码为0x35(十六进制)或53(十进制)。具有值'5'的整数作为实际的5,即0101二进制被存储在存储器中。

+0

所以基本上,myInt = Int32.Parse()这一行将字符串5更改为一个实际的数字,以便它可以分配给myInt。我没有考虑如果键入5是一个字符串。 –

5

'五'不是一个数字。这是一个4个字符的字符串,里面没有数字。 parse32正在寻找的是一个包含数字字符的STRING。你必须改为“5”。

+0

'5'是一个数字;-p – Jodrell

+0

这是一个字符串。注意引号。 –

+0

*五*不是数字*五*是一个*四*字母词。但是这个特定的四个字母字表达的概念是表示数字* 5 * – EtherDragon

2

Int32.Parse期望的字符串表示形式是十进制数字(基数为10)的序列,例如"2011"。它不接受自然语言。

是什么呢基本上是这样的:

return 1000 * ('2' - '0') 
    + 100 * ('0' - '0') 
    + 10 * ('1' - '0') 
    + 1 * ('1' - '0'); 

你可以通过不同的NumberStyles轻微定制Int32.Parse。例如,NumberStyles.AllowLeadingWhite允许输入字符串中的前导空格:" 2011"