【问题标题】:Convert.ToInt32 and int.Parse failing with single digit stringsConvert.ToInt32 和 int.Parse 因单个数字字符串而失败
【发布时间】:2013-09-03 03:39:27
【问题描述】:

我有一个 C# 应用程序,但我遇到了这个异常

System.FormatException: Input string was not in a correct format. at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo)

当尝试任何单个数字字符串 Convert.ToInt32

这是我的代码:

Console.Write("Enter IP : ");
string ip = Console.ReadLine();
Console.Write("Enter port : ");
string port = Console.ReadLine();
Console.Write("Enter interval in MS : ");
string temp1 = Console.ReadLine(); 
TO = Convert.ToInt32(temp1);
Console.Write("Enter number of threads to use : ");
string temp2 = Console.ReadLine();
threads = Convert.ToInt32(temp2);
ipe1 = new IPEndPoint(IPAddress.Parse(ip), Convert.ToInt32(port));

我不知道发生了什么,所以任何建议都会有所帮助。 (我在深夜发布,因此它可能会被删除,然后在更好的时间重新询问)

【问题讨论】:

  • 你的代码对我有用...你能指出它到底在哪里中断吗?
  • 如果输入正确,该代码就可以正常工作。检查您的用户条目。
  • 如果你使用调试器,你能看到Convert.ToInt32失败的实际值吗?
  • 也非常适合我。
  • 您可以随时询问,late at night 在您的国家/地区,但在我的国家/地区是早上 :)

标签: c# api parsing exception int


【解决方案1】:

找到了解决方案:我有一个线程在后台读取键,它阻塞了输入:p,我的错

static void toggleloop()
        {
            do
            {
                ConsoleKeyInfo key1 = Console.ReadKey();
                if (key1.Key == ConsoleKey.F1 && loop == true && showstatsbool == true)
                {
                    loop = false;
                    showstatsbool = false;
                }
            } while (true);
        }

在所有形式的输入完成之前不应调用

【讨论】:

  • 您的问题可能是使用了loop == trueshowstatsbool == true,无用的比较和错误的命名+错误的大小写会弄乱编译器。
【解决方案2】:

如果您输入 intiger 值作为输入,此代码将起作用。即使您在输入整数值之前或之后有空格,这也会失败(尝试使用Convert.ToInt32(temp1.Trim()))。因此,您可以改为调用Int32.TryParse 方法。它返回一个Boolean 值,指示转换是成功还是失败。

int port;
IPAddress ip;

Console.Write("Enter IP : ");
while (!int.TryParse(Console.ReadLine(), out ip))
      Console.Write("The value must be IP Address, try again: ");

Console.Write("Enter port : ");
while (!int.TryParse(Console.ReadLine(), out port))
      Console.Write("The value must be of integer type, try again: ");

string port = Console.ReadLine();

Console.Write("Enter interval in MS : ");
while (!int.TryParse(Console.ReadLine(), out TO))
      Console.Write("The value must be of integer type, try again: ");

Console.Write("Enter number of threads to use : ");
while (!int.TryParse(Console.ReadLine(), out threads))
      Console.Write("The value must be of integer type, try again: ");

ipe1 = new IPEndPoint(ip, port);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2017-03-25
    相关资源
    最近更新 更多