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

时间:2013-07-22 10:35:15

标签: c# wpf string textbox int32

输入字符串格式不正确。 我在运行时获得了一个异常“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作为整数参数。我无法改变它,因为如果我改变了,它会影响其他代码。

4 个答案:

答案 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构造函数需要taskproject为整数,因此必须具有与不同任务和项目对应的整数列表。现在你不能指望Int32知道哪个任务对应哪个号码,你呢?

我建议您对ComboBoxesTaskText使用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;
}