输入字符串的格式不正确.正在将字符串转换为int

本文关键字:字符串 转换 int 格式 不正确 输入 | 更新日期: 2023-09-27 18:24:07

输入字符串的格式不正确。我在运行时得到一个异常,称为"System.FormatException"。

以下行显示异常-

public int Task 
{
    get
    { 
        return Int32.Parse(TaskText.Text);
    }
    set
    { 
        TaskText.Text = value.ToString(); 
    }
}
public int Project 
{
    get
    { 
        return Int32.Parse(ProjectText.Text);
    }
    set
    { 
        ProjectText.Text = value.ToString(); 
    }
}

我也试过-

Convert.ToInt32(TaskText.Text)
Convert.ToInt32(ProjectText.Text)

我需要把这些传递给下面的构造函数,

Harvest_TimeSheetEntry entry = new Harvest_TimeSheetEntry(client,starttime,stoptime,task,project);

这个构造函数存储在一些类中,其中task和project是整数参数。我不能更改它,因为如果我更改了,它会影响其他代码。

输入字符串的格式不正确.正在将字符串转换为int

看起来您的输入来自接受用户输入的控件,这只是要求失败,因为用户可能会输入不代表整数值的内容。您可以使用TryParse来避免这种情况:

var result = 0;
if (int.TryParse(TaskText.Text, out result)) {
  return result;
}
return 0;

因此,如果TaskText.Text == "1"的值,这将成功;如果TaskText.Text == "aaaa"的值为,则此操作将失败,并返回零。您的示例将根据经验提出适当的异常。

然而,如果您不能处理坏值,没有其他选择,并且应用程序依赖于输入来前进,那么在这里发生异常可能是正确的。更有可能的是,您可以对输入字段进行一些验证,以防止提交错误的数据。

由于Harvest_TimeSheetEntry构造函数要求taskproject为整数,因此必须有一个对应于不同任务和项目的整数列表。现在你不能指望Int32知道哪个任务对应哪个数字,是吗?

我建议你用ComboBoxes代替TaskTextProjectText。然后,您可以为每个ComboBoxItem.Tag分配正确的对应整数。

请注意,这远远超出了您对SO的期望。

如果您不使用MVVM或绑定,您只需在需要之前进行检查即可。t

 int task;
 int project;
 if(!Int32.TryParse(TaskText.Text, out task))
 {}       //errorhandling here
 if(!Int32.TryParse(ProjectText.Text, out project))
 {}//errorhandling here
 //all fine
 var entry = new Harvest_TimeSheetEntry(client,starttime,stoptime,task,project);

您必须检查是否可以将其解析为Integer

尝试

Int32 foo =0;
if (Int32.TryParse(TaskText.Text, out foo))
{
    return foo;
}