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

文本框输入成绩经方法计算返回列表框遇类型转换异常问题

Hey Jessica, let's work through that System.InvalidCastException you're encountering with your grade calculation tool!

Fixing the "Conversion from string "" to type 'Double' is not valid" Error

First, let's break down why this error is happening: When you split the input grades by spaces, you're likely ending up with empty strings (from leading/trailing spaces in the input, or multiple consecutive spaces). Empty strings can't be converted to a numeric type like Double, which triggers this exception.

Here's how to fix it step by step:

1. Clean Up Input and Filter Invalid Entries

Before splitting the input, trim extra whitespace and use a split option that automatically removes empty strings:

' Assume your input textbox is named txtScores, and results listbox is lstResults
Dim rawInput As String = txtScores.Text.Trim() ' Remove leading/trailing spaces
Dim gradeStrings() As String = rawInput.Split({" "}, StringSplitOptions.RemoveEmptyEntries)

The StringSplitOptions.RemoveEmptyEntries parameter is key here—it eliminates any blank entries created by extra spaces, so you only get valid grade strings to process.

2. Safely Convert Each Grade

Even after filtering empty strings, it's smart to validate that each entry is a valid number. Use Double.TryParse to avoid crashes from non-numeric input:

Dim total As Double = 0
Const weight As Double = 0.15 ' Your percentage multiplier

For Each gradeStr As String In gradeStrings
    Dim grade As Double
    If Double.TryParse(gradeStr, grade) Then
        total += grade * weight
    Else
        ' Optional: Notify user about invalid entries
        lstResults.Items.Add($"Warning: '{gradeStr}' is not a valid grade, skipped.")
    End If
Next

' Add the final result to the listbox
lstResults.Items.Add($"Calculated Total: {total.ToString("F1")}")

3. Full Working Button Click Example

Putting it all together, your submit button click event should look like this:

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    lstResults.Items.Clear() ' Clear previous results first
    
    Dim rawInput As String = txtScores.Text.Trim()
    If String.IsNullOrEmpty(rawInput) Then
        lstResults.Items.Add("Please enter valid grades separated by spaces.")
        Return
    End If
    
    Dim gradeStrings() As String = rawInput.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
    Dim total As Double = 0
    Const weight As Double = 0.15
    
    For Each gradeStr As String In gradeStrings
        Dim grade As Double
        If Double.TryParse(gradeStr, grade) Then
            total += grade * weight
        Else
            lstResults.Items.Add($"Invalid entry: '{gradeStr}' skipped from calculation.")
        End If
    Next
    
    lstResults.Items.Add($"Final Result: {total.ToString("F1")}")
End Sub

Why This Fixes the Error

Let's say a user inputs " 100 85 93 " (with leading, trailing, and double spaces). Without the RemoveEmptyEntries option, splitting would give you {"", "100", "", "85", "93", ""}—and trying to convert those empty strings to Double throws the exception. With the fix, you only get {"100", "85", "93"}, which converts cleanly.

Adding Double.TryParse also makes your tool more robust—it handles typos like "abc 85 93" gracefully instead of crashing.

内容的提问来源于stack exchange,提问作者Jessica Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:27:00