0

输入字符串的格式不正确。我在运行时遇到“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);

此构造函数存储在某个类中,任务和项目作为整数参数。而且我无法更改它,因为如果我更改了,它会影响其他代码。

4

4 回答 4

3

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

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

所以,如果 的值TaskText.Text == "1",这将成功;如果值为TaskText.Text == "aaaa",这将失败 - 并返回零。根据经验,您的示例将引发适当的异常。

但是,在这里发生异常可能是正确的事情,如果您无法处理错误的值,没有替代方案,并且应用程序依赖输入继续前进。更有可能的是,您可以对输入字段进行一些验证,以防止提交错误数据。

于 2013-07-22T10:39:14.803 回答
0

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

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

请注意,这远远超出了您应该从 SO 获得的答案。

于 2013-07-22T11:29:12.773 回答
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);
于 2013-07-22T12:24:37.627 回答
-1

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

尝试

Int32 foo =0;
if (Int32.TryParse(TaskText.Text, out foo))
{
    return foo;
}
于 2013-07-22T10:40:23.737 回答