输入字符串的格式不正确.正在将字符串转换为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是整数参数。我不能更改它,因为如果我更改了,它会影响其他代码。
看起来您的输入来自接受用户输入的控件,这只是要求失败,因为用户可能会输入不代表整数值的内容。您可以使用TryParse
来避免这种情况:
var result = 0;
if (int.TryParse(TaskText.Text, out result)) {
return result;
}
return 0;
因此,如果TaskText.Text == "1"
的值,这将成功;如果TaskText.Text == "aaaa"
的值为,则此操作将失败,并返回零。您的示例将根据经验提出适当的异常。
然而,如果您不能处理坏值,没有其他选择,并且应用程序依赖于输入来前进,那么在这里发生异常可能是正确的。更有可能的是,您可以对输入字段进行一些验证,以防止提交错误的数据。
由于Harvest_TimeSheetEntry
构造函数要求task
和project
为整数,因此必须有一个对应于不同任务和项目的整数列表。现在你不能指望Int32
知道哪个任务对应哪个数字,是吗?
我建议你用ComboBoxes
代替TaskText
和ProjectText
。然后,您可以为每个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;
}