我有一个动物园动物的System.Data.DataTable(SomeZoo),我想通过他/她的名字找到一个特定的动物。
For each Animal in SomeZoo.Rows
if not (Animal("Name").ToString = Given_Name) Then
SomeZoo.Rows.Remove(Animal)
else
continue for
End if
我有一个朋友说“继续”打破if语句并回去整理不匹配的动物名称是'不良做法'。真是个蠢才。
无论如何,他是对的吗?用'继续'来打破一个if语句对于每个循环一个'坏练习'?他甚至将它与'goto'进行了比较。
谢谢!
答案 0 :(得分:1)
在您的示例代码中,它似乎毫无意义且令人费解,但继续有很好的用途。 注意:删除完成后,示例代码将出错。也许试试以下。
For i As Integer = SomeZoo.Rows.Count - 1 To 0 Step -1
If Not SomeZoo.Rows(i)("Name").ToString = Given_Name) Then SomeZoo.Rows.Remove(SomeZoo.Rows(i))
Next
答案 1 :(得分:1)
我将继续作为Goto的错误选项的良好替代方案。继续对反对者也认为退出是不好的做法?我不知道怎么能认为一个是可以接受的而另一个不是。是的,它们在技术上是语法糖,但如果你认为这是一件坏事,你为什么用VB编码?它们有时优于嵌套if语句的高阶和/或创建其他不必要的布尔值,仅检查是否完成循环的其余部分。它们变得更有用(就减少你必须花费来实现结果的努力而言,我认为这是重点)如果用来打破它所使用的最内层循环之外的循环。(See this link.)
就何时使用它们而言,经验法则是这样做会使您的代码更轻松,更容易理解。我有一个包含十几个列表框的搜索表单,用户可以使用它来限制结果,将来可能会添加更多的列表框和值。在没有Continue For的情况下对表单进行编码意味着有大量的嵌套If语句或带有十几个连接的SQL命令,从现在起我需要再添加一次验证检查时,我不会遇到这两个问题。相反,只要记录在将条件加载到结果中并且继续享受我的生活之前记录失败,我就会使用“继续”。 (在这种情况下,我可以通过两个简单的条件将我循环的记录限制为一个非常易于管理的数字,而我的大多数其他检查都相当复杂。)