C# 捕获异常与在集合中循环(不那么愚蠢的方式)
未命名的公司具有C# 捕获异常与在集合中循环(不那么愚蠢的方式),c#,exception,sap,enumerable,C#,Exception,Sap,Enumerable,未命名的公司具有IFormsCollection.GetForms(“ObjectIndex”)| | IFormsCollection.GetForms(0)方法,如果表单不在集合中,该方法将引发异常。它不是IEnumerable,需要for()循环或.GetEnumerator()->while()来获取列表中的每个项目 我的问题是,我是否应该每次都遍历IForms集合?我需要找到一个大部分时间都不在那里的表单,或者跳过循环,假设它抛出异常时它不在那里?为了便于搜索,我不希望维护第二个可IE
IFormsCollection.GetForms(“ObjectIndex”)| | IFormsCollection.GetForms(0)
方法,如果表单不在集合中,该方法将引发异常。它不是IEnumerable
,需要for()
循环或.GetEnumerator()
->while()
来获取列表中的每个项目
我的问题是,我是否应该每次都遍历IForms集合?我需要找到一个大部分时间都不在那里的表单,或者跳过循环,假设它抛出异常时它不在那里?为了便于搜索,我不希望维护第二个可IEnumerable的集合。不要故意抛出异常。它们不应用于正常控制流。异常会破坏性能。如果愿意的话,显然可以循环,但是如果从这个集合中构建一个字典,其中键是名称,值是表单,那么速度会快得多。然后简单地在字典中搜索密钥,这样会更快,而且不会出现异常
如果可能的话,不要将异常用于正常的控制流。
From不创建第二个集合,围绕此集合创建一个包装器,该包装器实现IEnumerableNote,如果对象未实现IEnumerable
或IEnumerable
,则仍可在foreach
循环中使用该对象。规范只要求它有一个GetEnumerator
方法,其返回类型有一个Current
属性和一个MoveNext
方法返回一个bool
。我一直在使用(.MoveNext){list.AddOrUpdate(..Current.GUID,.Current);}将集合作为ConcurrentDictionary进行维护,因为我正在对事件并行调用这些方法。我只是看不出当它执行枚举器而不执行其他操作时,将其作为自定义集合类有什么好处。