Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获异常与在集合中循环(不那么愚蠢的方式)_C#_Exception_Sap_Enumerable - Fatal编程技术网

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进行维护,因为我正在对事件并行调用这些方法。我只是看不出当它执行枚举器而不执行其他操作时,将其作为自定义集合类有什么好处。