【发布时间】:2017-10-12 05:15:04
【问题描述】:
我是 VB.net 的新手程序员
所以我一直卡在这段代码中,这是用于随机名称生成器。
Private Function RandomLname(ByRef ranLname As String) As String
Dim reader As StreamReader = My.Computer.FileSystem.OpenTextFileReader("[pathto file.txt]", Encoding.Default)
Dim lines As New List(Of String)
Dim rnd As New Random()
Dim line As Integer
While reader.Peek <> -1
lines.Add(reader.ReadLine())
End While
line = rnd.Next(lines.Count + 1)
'the error shown in this line
ranLname = lines(line)
Return ranLname
reader.Close()
reader.Dispose()
End Function
运行几次后我不断收到 ArgumentOutOfRangeException 异常,有人可以帮我吗? 我需要脚本在到达 list.count 时再次从头开始读取列表。有人知道吗?
任何帮助将不胜感激。
【问题讨论】:
-
试试
line = rnd.Next(lines.Count)。 -
您的代码存在重大缺陷,因为您在
Return语句之后关闭了文本文件,即您根本没有关闭它。您应该使用Using语句打开它,然后无论方法如何结束,它都会隐式关闭。 -
我已经删除了 reader.Close() 和 reader.Dispose() 但它不会重新列出列表。即使我删除(+ 1),该列表在写入 60 多个结果后也不会产生任何结果
-
reader.Close()和reader.Dispose()都做同样的事情,你只需要调用其中的一个。但是它们永远不会执行,因为函数在Return处退出。就像 jmcilhinney 所说,您应该将reader包装在Usingblock 中,并删除Close()和Dispose()调用。 -
我明白了,顺便说一句,您如何从列表中排除/删除已使用的字符串?