为什么尝试从其余代码中捕获隐藏变量

时间:2013-03-12 05:28:09

标签: vb.net

为什么尝试从vb.net中的其余代码中隐藏变量。

我在网上搜索并找到了一些C#答案,但我不太了解C#以了解他们在谈论什么。

     Public Function GetUsers(ByVal Path As String) As System.Collections.Generic.IEnumerable(Of System.IO.DirectoryInfo)
    Dim users As System.Collections.Generic.IEnumerable(Of System.IO.DirectoryInfo)
    Dim DDLEXEPath As String = Path
    'this is start directory
    Dim curPath = DDLEXEPath.Substring(0, DDLEXEPath.LastIndexOf("\"))

    Try
        Dim diTop As New DirectoryInfo(curPath)
        users = diTop.EnumerateDirectories
    Catch UnAuthTop As UnauthorizedAccessException
        Debug.WriteLine("{0}", UnAuthTop.Message)
    Catch LongPath As Exception
        Console.WriteLine("{0}", LongPath.Message)
    End Try
    Return users
End Function

我收到“返回用户”中的用户未初始化的错误。我在try块中为它分配了一个值。

我使用相同格式的简单字符串,并得到相同的错误。

到目前为止,这是一个漫长的月份; - (

感谢。

4 个答案:

答案 0 :(得分:4)

“尝试/捕捉”不会“隐藏”任何东西。但是由于你在“try”中分配了“users”,并且由于(根据定义)不能保证“try”将完成,VB.Net认为“用户”在返回时“未初始化”。

解决方案:

明确初始化try / catch的用户

    users = Nothing
    Try
        Dim diTop As New DirectoryInfo(curPath)
        users = diTop.EnumerateDirectories
    Catch UnAuthTop As UnauthorizedAccessException
        Debug.WriteLine("{0}", UnAuthTop.Message)
    Catch LongPath As Exception
        Console.WriteLine("{0}", LongPath.Message)
    End Try
    Return users

答案 1 :(得分:0)

因为try打开了一个新范围,并且你的return语句超出了这个范围。

解决方案1:在try块内移动返回并将其作为最后一行放在那里。

解决方案2:将dim移至try之前,并仅在try中保留赋值。

答案 2 :(得分:0)

您只需在try catch块中设置用户的值。

以下仅定义用户类型

 Dim users As System.Collections.Generic.IEnumerable(Of System.IO.DirectoryInfo)

添加新内容以初始化

 Dim users As new System.Collections.Generic.IEnumerable(Of System.IO.DirectoryInfo)

答案 3 :(得分:0)

错误消息告诉您的是users必须先分配一个值才能Return它(或做指定的任何其他内容) )。因此,只需明确声明users在声明时设置为Nothing

Dim users As IEnumerable(Of DirectoryInfo) = Nothing