You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#代码触发System.FormatException且无法获取Total值求助

解决System.FormatException异常与Total值无法获取的问题

嘿,我来帮你搞定这个问题!咱们一步步来分析和解决:

异常原因

你遇到的System.FormatException是因为int.Parse()这个方法非常“挑剔”——它要求输入的字符串必须是严格的有效整数格式。如果txtMaths.Text里是空的、包含字母/空格/特殊符号,或者数值超出了int类型的范围(比如大于2147483647或小于-2147483648),这个方法就会直接抛出异常,导致程序中断,后面计算Total的代码根本没机会运行,所以你拿不到Total值。

解决方案:用int.TryParse替代int.Parse

int.TryParse()是更安全的转换方法,它不会抛出异常,而是返回一个布尔值告诉你转换是否成功,同时通过out参数输出转换后的整数。这样既能避免程序崩溃,还能给用户友好的错误提示。

修改后的代码示例:

// 变量名改用小驼峰,符合C#编码规范
int sinhala, maths, science, history, buddhism, english, group1, group2, group3, total, average;

private void btnCalculate_Click(object sender, EventArgs e)
{
    // 先初始化所有分数为0,避免未赋值的问题
    sinhala = 0;
    maths = 0;
    science = 0;
    history = 0;
    buddhism = 0;
    english = 0;
    group1 = 0;
    group2 = 0;
    group3 = 0;

    // 逐个验证并转换每个文本框的输入
    if (!int.TryParse(txtSinhala.Text, out sinhala))
    {
        MessageBox.Show("请输入有效的僧伽罗语分数!");
        txtSinhala.Focus(); // 让光标回到错误的输入框
        return; // 终止后续代码执行
    }

    if (!int.TryParse(txtMaths.Text, out maths))
    {
        MessageBox.Show("请输入有效的数学分数!");
        txtMaths.Focus();
        return;
    }

    if (!int.TryParse(txtScience.Text, out science))
    {
        MessageBox.Show("请输入有效的科学分数!");
        txtScience.Focus();
        return;
    }

    if (!int.TryParse(txtHistory.Text, out history))
    {
        MessageBox.Show("请输入有效的历史分数!");
        txtHistory.Focus();
        return;
    }

    if (!int.TryParse(txtBuddhism.Text, out buddhism))
    {
        MessageBox.Show("请输入有效的佛学分数!");
        txtBuddhism.Focus();
        return;
    }

    if (!int.TryParse(txtEnglish.Text, out english))
    {
        MessageBox.Show("请输入有效的英语分数!");
        txtEnglish.Focus();
        return;
    }

    if (!int.TryParse(txtGroup1.Text, out group1))
    {
        MessageBox.Show("请输入有效的Group1分数!");
        txtGroup1.Focus();
        return;
    }

    if (!int.TryParse(txtGroup2.Text, out group2))
    {
        MessageBox.Show("请输入有效的Group2分数!");
        txtGroup2.Focus();
        return;
    }

    if (!int.TryParse(txtGroup3.Text, out group3))
    {
        MessageBox.Show("请输入有效的Group3分数!");
        txtGroup3.Focus();
        return;
    }

    // 所有输入都有效,计算总分
    total = sinhala + maths + science + history + buddhism + english + group1 + group2 + group3;
    txtTotal.Text = total.ToString();

    // 如果需要计算平均分,可以在这里补充
    // average = total / 9; // 注意整数除法会舍去小数,若需要精确值可改用double类型
}

额外优化建议

  • 限制文本框输入:可以给每个分数文本框添加KeyPress事件,只允许输入数字和退格键,从源头减少无效输入:
    private void txtMaths_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 只允许数字和退格键
        if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b')
        {
            e.Handled = true;
        }
    }
    
  • 空值处理:int.TryParse会把空字符串判定为转换失败,所以上面的代码已经覆盖了空输入的情况,不用额外判断。
  • 变量初始化:提前给所有分数变量赋值0,避免出现“使用未赋值的局部变量”的编译错误。

这样修改后,不仅能解决FormatException的问题,Total值也能正常计算并显示在txtTotal里啦!

内容的提问来源于stack exchange,提问作者Chamika Lakshaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:16