输入字符串格式不正确。 我在运行时获得了一个异常“System.FormatException”。
Follwing lines显示异常 -
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作为整数参数。我无法改变它,因为如果我改变了,它会影响其他代码。
答案 0 :(得分:3)
看起来好像是从接受用户输入的控件获取输入,这只是要求失败,因为用户可能会输入不代表整数值的内容。您可以使用TryParse
来避免这种情况:
var result = 0;
if (int.TryParse(TaskText.Text, out result)) {
return result;
}
return 0;
所以,如果TaskText.Text == "1"
的值,这将成功;如果TaskText.Text == "aaaa"
的值,这将失败 - 并返回零。您的示例会像经验那样引发相应的异常。
但是,异常可能是正确的事情发生在这里,如果你不能处理坏的值,没有替代,并且应用程序依赖于输入继续前进。更有可能的是,您可以对输入字段进行一些验证,以防止提交错误数据。
答案 1 :(得分:0)
由于Harvest_TimeSheetEntry
构造函数需要task
和project
为整数,因此必须具有与不同任务和项目对应的整数列表。现在你不能指望Int32
知道哪个任务对应哪个号码,你呢?
我建议您对ComboBoxes
和TaskText
使用ProjectText
。然后,您可以为每个ComboBoxItem.Tag
分配正确的相应整数。
请注意,这远远超出了您应该从SO中得到的答案。
答案 2 :(得分:0)
如果您不使用MVVM或绑定,您可以在需要之前进行检查。吨
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);
答案 3 :(得分:-1)
您必须检查是否可以将其解析为Integer
试
Int32 foo =0;
if (Int32.TryParse(TaskText.Text, out foo))
{
return foo;
}