为什么编译器无法在Regex.Matches的foreach中推断出正确的类型?我正在尝试从foreach循环中的Regex表达式迭代MatchCollection,使用var关键字,编译器推断chap是一个对象,它给出了Value属性未知的错误。foreach(ChapterExtractor.Matches(page.RawContent)中的varchapter){chapter.Add(chapter.Value);//不编译!当var被Match替换时,它工作得很好。foreach(在ChapterExtractor.Matches(page.RawContent)中匹配章节){chapter.Add(chapter.Value);//好的!}MSDN(http://msdn.microsoft.com/pt-br/library/system.text.regularexpressions.matchcollection(v=vs.110).aspx中提供的示例)也在foreach循环中使用了Match类。但是,编译器是否应该推断该章是Match类型而不是对象类型?因此,编译器似乎隐式地执行了要匹配的对象。真的吗?但是,编译器是否应该推断chap类型是Match而不是object?Matches返回一个非泛型MatchCollection,其枚举器方法返回一个对象。因此,编译器无法推断类型。它在您使用Match时起作用,因为基础项是Match,这就是它不会因InvalidCastException而失败的原因。所以看起来编译器隐式地执行了从对象到匹配的转换。真的吗?是的,这是真的。在foreach循环中,编译器使用您正在循环的对象的IEnumerable或通用IEnumerable接口。因为MatchCollection类只有一个IEnumerable接口publicclassMatchCollection:ICollection,IEnumerable编译器使用publicIEnumeratorGetEnumerator();这反过来又给出了当前的“对象”类型在foreach中推断出正确的类型?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicinterfaceIEnumerator{objectCurrent{get;}}本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
