VB.NET在集合中按键选择项:尝试。。。捕获与每个

VB.NET在集合中按键选择项:尝试。。。捕获与每个,vb.net,collections,Vb.net,Collections,我只是想知道,对于通过字符串或键选择集合中的项目,最好的编程技术是什么。简而言之,这里有两个示例代码: 代码1:试试。。。抓住 子TryCatch示例 '定义对象。。。 Dim col_列表作为集合 将项目标记为Windows.Forms.label 调暗对象\u结果为对象 '将某些内容分配给集合。。。 label\u Item=New Windows.Forms.label label\u Item.Name=label\u 1 col\u List.Addlabel\u Item,label

我只是想知道,对于通过字符串或键选择集合中的项目,最好的编程技术是什么。简而言之,这里有两个示例代码:

代码1:试试。。。抓住

子TryCatch示例 '定义对象。。。 Dim col_列表作为集合 将项目标记为Windows.Forms.label 调暗对象\u结果为对象 '将某些内容分配给集合。。。 label\u Item=New Windows.Forms.label label\u Item.Name=label\u 1 col\u List.Addlabel\u Item,label\u Item.Name '现在尝试使用带有键字符串的项属性来查找标签\u 2。。。 尝试 object\u Result=col\u List.ItemLabel\u 2 “如果有的话,做点什么。。。 特例 "我们可以查找错误的原因,, 但对于这个例子,我们将跳过这个。 '找不到标签\u 2。。。 Debug.print无法通过字符串“Label_2”找到请求的对象 结束尝试 端接头 代码2:用于。。。各

子示例 '定义对象。。。 Dim col_列表作为集合 将项目标记为Windows.Forms.label 调暗对象\u结果为对象 '将某些内容分配给集合。。。 label\u Item=New Windows.Forms.label label\u Item.Name=label\u 1 col\u List.Addlabel\u Item,label\u Item.Name '现在尝试通过浏览集合来查找标签2。。。 作为列列表中的对象的每个对象项 如果object_Item.Name=Label_2,则 对象\结果=对象\项目 如果结束 下一个 '现在我们必须检查是否有可用的对象。。。 如果object_项为Nothing,则 Debug.print无法通过字符串“Label_2”找到请求的对象 如果结束 端接头 对于代码1,我们必须运行一个错误来发现Label_2键不可用。对于代码2,我们必须多写几行,但它也会这样做


现在的问题是:更好的方法是什么?

根据Hans Passant对MSDN的评论和链接,methode一如既往地包含了收集对象:阅读f________;手册,这里是我问题的答案

起初,对于代码2,用户varocabas发现了一个基本的缺失项:Exit for

作为列列表中的对象的每个对象项 如果object_Item.Name=Label_2,则 对象\结果=对象\项目 '只是为了避免浏览所有元素。。。 退出 如果结束 下一个 下面的解决方案可能是一种很好的技术,可以在不使用Try的情况下找到正确的元素。。。接住并等待下一个

链接:

代码3a包含Methode

子容器样本 '定义对象。。。 Dim col_列表作为集合 将项目标记为Windows.Forms.label 调暗对象\u结果为对象 '将某些内容分配给集合。。。 label\u Item=New Windows.Forms.label label\u Item.Name=label\u 1 col\u List.Addlabel\u Item,label\u Item.Name '现在尝试通过包含集合方法查找标签\u 2。。。 如果col_List.ContainsLabel_2,则object_Result=col_List.ItemLabel_2 如果object_结果为Nothing,则退出Sub “用结果做东西。。。 ' ... 端接头 代码3b包含Methode

子容器样本 '定义对象。。。 Dim col_列表作为集合 将项目标记为Windows.Forms.label 调暗对象\u结果为对象 '将某些内容分配给集合。。。 label\u Item=New Windows.Forms.label label\u Item.Name=label\u 1 col\u List.Addlabel\u Item,label\u Item.Name '现在尝试通过浏览包含收集方法来查找标签_2。。。 如果col_List.ContainsLabel_2,则 object\u Result=col\u List.ItemLabel\u 2 “用结果做东西。。。 ' ... 其他的 Debug.print无法通过字符串“Label_2”找到请求的对象 如果结束 端接头
最后要说的是,注释中提到的其他列表/数组对象可能有更好的解决方案。

显然,代码n.1更紧凑、更可读,而且应该更快,因为集合应该作为哈希表实现。当然,设置异常处理会有一些开销,但我还是更喜欢它。@A.S.H.糟糕的建议。第一个选项不好。@varocabas在大多数情况下,可以确定集合中是否存在密钥,甚至可以使用选项1而不进行异常处理。即使不确定,在哈希表O1中搜索也比迭代所有项要好On@A.S.HOP算法是错误的,不需要遍历所有元素。请注意,负责查找给定密钥(例如Contains)的函数实际上是构建在循环上的;它们是经过优化的版本,具有比循环更好的可读性,但没有更好的东西。试捕永远不应该被考虑。要么改进循环,例如,在找到密钥时退出,要么依赖于我的答案中建议的不同方法:LINQ,或者确保给定类接受某些方法,例如,包含或索引。。。有很多选择,但不是试着抓 歌曲集?为什么列表、数组、arralist、字典或任何一种.NET替代方案都不能带来很大的灵活性?您甚至不能将LINQ用于集合!在这种情况下,只需在条件内中断循环即可。但你最好依靠不同的类型。