【问题标题】:Getting uncasted error for no reason无缘无故地出现未铸造的错误
【发布时间】:2015-08-23 03:26:48
【问题描述】:

我对 Visual Basic 还很陌生,所以这可能很明显,但我认为没有理由抛出和未强制转换的异常错误。问题代码如下:

    Public Sub textBoxFilePath_TextChanged(sender As Object, e As EventArgs) Handles textboxFilePath.TextChanged
    If textboxFilePath.Text.Trim.Length > 0 Then
        If My.Computer.FileSystem.FileExists(textboxFilePath.Text) Then
            Dim checkType As String
            checkType = System.IO.Path.GetExtension(textboxFilePath.Text)
            If checkType = ".xlsx" Or ".xls" Or ".xlsm" Then
                requiredPath = True
            Else
                requiredPath = False
            End If
        End If
        End If

我得到的错误是

Microsoft.VisualBasic.dll 中出现“System.InvalidCastException”类型的未处理异常

附加信息:从字符串“.xls”到类型“布尔”的转换无效。

有什么想法吗?

【问题讨论】:

    标签: vb.net visual-studio


    【解决方案1】:

    试试这个:

    If checkType = ".xlsx" Or checkType = ".xls" Or checkType = ".xlsm" Then
        requiredPath = True
    Else
        requiredPath = False
    End If
    

    您的代码试图评估“.xls”(它是一个字符串),它不能很好地转换为布尔值 true/false。

    您也可以这样做来应用“短路”,因此只评估第一个 true:

    If checkType = ".xlsx" OrElse checkType = ".xls" OrElse checkType = ".xlsm" Then
        requiredPath = True
    Else
        requiredPath = False
    End If
    

    【讨论】:

    • 哦,哇,我应该想到的。非常感谢!
    • 您好,嗯,我的问题回答得太快了,我无法将其标记为正确答案。我还要再等 4 分钟!
    • 或者你可以这样做:requiredPath = {".xls", ".xlsx", ".xlsm"}.Contains(checkType)
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多