c# – ‘yield return’语句不能出现在try / catch块约束中
发布时间:2020-12-16 00:01:00 所属栏目:百科 来源:网络整理
导读:参见英文答案 Why can’t yield return appear inside a try block with a catch?????????????????????????????????????5个 这两种方法几乎相同,但第一种方法无法编译.我无法弄清楚这种约束存在的原因 /// summary /// Dynamically loads all document extra
参见英文答案 >
Why can’t yield return appear inside a try block with a catch?????????????????????????????????????5个
这两种方法几乎相同,但第一种方法无法编译.我无法弄清楚这种约束存在的原因 /// <summary> /// Dynamically loads all document extractors from implementation assemblies into an enumeration /// </summary> private static IEnumerable<IDocumentExtractor> EnumerateInstances() { IEnumerable<Type> types = EnumerateTypes(); foreach(Type type in types) { try { IDocumentExtractor extractor = Activator.CreateInstance(type) as IDocumentExtractor; yield return extractor; } catch { _log.WarnFormat("Type {0} couldn't be instanced.",type.Name); } } } 并且实际编译的版本没有问题: /// <summary> /// Dynamically loads all document extractors from implementation assemblies into an enumeration /// </summary> private static IEnumerable<IDocumentExtractor> EnumerateInstances() { IEnumerable<Type> types = EnumerateTypes(); foreach (Type type in types) { IDocumentExtractor extractor = null; try { extractor = Activator.CreateInstance(type) as IDocumentExtractor; } catch { _log.WarnFormat("Type {0} couldn't be instanced.",type.Name); } if (extractor != null) yield return extractor; } } 解决方法
您可以在Eric Lippert的Iterator Blocks系列中找到这个问题的答案.具体来看看标题为
Iterator Blocks,Part Five: Push vs Pull的帖子.七部分系列从
Iterator Blocks,Part One开始.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |