为什么尝试从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块中为它分配了一个值。
我使用相同格式的简单字符串,并得到相同的错误。
到目前为止,这是一个漫长的月份; - (
感谢。
答案 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