![](/img/trans.png)
[英]FormatException was Unhandled ((int.parse) value from an array)
[英]FormatException was unhandled (int.Parse)
我有:
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 <string>转换为List <int>。 没有编译器错误,但是运行时错误为“ FormatException被取消”并指向(int.Parse)。 我已经读过int.Parse如果在空字符串上使用会导致这种情况,但是我不知道这种情况如何。
因为要添加空格,所以“ Split”方法将在不期望的末尾返回一个空元素,因此请添加一个选项“ SplitOptions.RemoveEmptyEntries”(从头开始,检查其名称是否正确),然后代码即可正常工作。
您可以这样使用TryParse
,
student = new Student(txtName.Text, result.Select(s =>
{
int res = 0;
return int.TryParse(s, out res) ? res : 0;
}).ToList());
此代码将避免您遇到的异常,如果无法解析任何值,它将设置为0
问题是您的字符串之一在用空格('')分割后无效int。 我建议仅考虑那些是有效数字的分数。
让我们考虑以下分数,以空格分隔
111123 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();
通过在以下行中的Visual Studio中设置断点,可以轻松调试此错误:
student = new Student(txtName.Text, result.Select(int.Parse).ToList())
...然后手动检查result
列表。 字符串之一绝对不是可解析的int。
简而言之:您将收到一条不错的错误消息,并且应该能够使用标准的调试技术快速找到此错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.