FormatException未处理(int.Parse)

时间:2014-03-07 06:31:54

标签: c# parsing formatexception tolist

我有:

    private void btnAddScore_Click(object sender, EventArgs e)
    {
        if (IsInt32())     
        {
            txtScores.Text += txtScore.Text + " ";
            txtScore.Text = "";
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (IsValidData())
        {
            List<string> result = txtScores.Text.Split(' ').ToList();
            student = new Student(txtName.Text, result.Select(int.Parse).ToList());
            this.Close();
        }

    }

我正在尝试使用我的btnAddScore从我的txtScore到我的txtScores构建一系列分数。我相信我做得对。然后我通过用“”解析每个元素将该字符串转换为列表。然后我进一步转换List&lt;字符串&gt;到列表&lt; int&gt;。没有编译器错误,但是“FormatException未被解析”的运行时错误,并指向(int.Parse)。我已经读过,如果在空字符串上使用int.Parse会导致这种情况,但我不知道如果是这样的情况。

4 个答案:

答案 0 :(得分:3)

因为你要附加一个空格,“Split”方法会在你不想要的结尾处返回一个空元素,添加na选项“SplitOptions.RemoveEmptyEntries”(从头开始,检查它是否是正确的名称)和你的代码可以工作。

答案 1 :(得分:0)

你可以像这样使用TryParse

student = new Student(txtName.Text, result.Select(s =>
    {
        int res = 0;
        return int.TryParse(s, out res) ? res : 0;
    }).ToList());

此代码将避免您获得的异常,如果它无法解析任何值,则会将其设置为0

答案 2 :(得分:0)

问题是,在按空格('')拆分后,其中一个字符串无效。 我建议只考虑那些有效数字的分数。

让我们考虑下面用空格分隔的分数

  

111 123 12x 212 1454

此处 12x 无效,因此您应拒绝此号码。并且只获得四个有效数字,如下面的代码示例所示:

var scores = "111 123 12x 212 1454";
var regex = new Regex("^[0-9]*$");
var studentScore = scores.Split(' ').Where(a => regex.IsMatch(a)).ToList();

答案 3 :(得分:-3)

通过在以下行中的Visual Studio中设置断点,可以轻松调试此错误:

student = new Student(txtName.Text, result.Select(int.Parse).ToList())

...然后手动检查result列表。其中一个字符串肯定不是可解析的int。

简而言之:您有一个很好的错误消息,并且应该能够使用标准调试技术快速找到此错误。