Mid()用法和for循环 - 这是一个好习惯吗?

时间:2017-09-27 15:57:56

标签: vb.net

好的,所以我在大学时和老师说话,他说我的代码不是很好的做法。关于为什么会出现这种情况,我有点困惑。我们基本上创建了一个for循环,但是他在循环之外声明了他的循环计数器,因为它被认为是好的做法(对他而言),即使我们以后从未在代码中使用过该变量,所以对我来说它看起来像浪费记忆我们对代码做了更多,然后只使用了一个消息框,但我们的想法是从字符串中获取每个字符并使用它做一些事情。当我用索引调用变量时,他还使用Mid()函数来检索字符串中的字符。以下是他如何编写代码的示例:

Dim i As Integer = 0
Dim justastring As String = "test"
For i = 1 To justastring.Length Then
    MsgBox( Mid( justastring, i, 1 ) )
End For

以下是我如何编写代码的示例:

Dim justastring As String = "test"
For i = 0 To justastring.Length - 1 Then
    MsgBox( justastring(i) )
End For

是否有人能够提供每种方法的优点和缺点以及为什么以及我是否应该继续我的方式?

2 个答案:

答案 0 :(得分:0)

我建议你按照自己的方式进行操作,因为你可能会有消耗(虽然是少量)内存的变量,但更重要的是,更好的做法是尽可能少地定义对象。在您的教师代码中,循环结束时仍可访问变量i。有时这是可取的,但通常情况下,如果您只在有限数量的代码中使用变量,那么您应该只在需要的最小块内声明它。

关于Mid函数的问题,您可以通过将字符串视为字符数组来访问您知道的单个字符。在进行一些基本的基准测试之后,使用Mid函数需要花费更长的时间来处理,而不仅仅是通过索引值访问字符。在相对简单的代码中,这并没有多大区别,但如果你在一个循环中做了数百万次,那就会产生很大的不同。

还有其他因素需要考虑。比如代码的可读性和代码的修改,但是有很多网站在处理这类事情。

最后,我建议更改visual studio中的一些编译器选项

Option Strict to On

选项推断关闭

选项明确指示

这意味着编写更多代码,但代码更安全,您可以减少错误。看看here for an explanation

在您的代码中,这意味着您必须编写

Dim justastring As String = "test"
For i As Integer = 0 To justastring.Length - 1 Then
    MsgBox( justastring(i) )
End For

这样,您知道i绝对是一个整数。请考虑以下内容..

Dim i

你知道它是什么类型的吗?我也不是。

编译器不知道是什么,因此它将其定义为可以保存任何内容的对象类型。字符串,整数,列表..

考虑这段代码。

Dim i
Dim x
x = "ab"
For i = x To endcount - 1
    t = Mid(s, 999)
Next

编译器将编译它,但是当它被执行时,你将得到一个SystemArgumenException。在这种情况下,很容易看出出了什么问题,但通常情况并非如此。字符串中的数字可以是一整套新的蠕虫。

希望这有帮助。

答案 1 :(得分:0)

另一种方法是在字符串上使用For Each

像这样,不需要索引变量。

Dim justastring As String = "test"
For Each c As Char In justastring
    MsgBox(c)
Next