Lea*_*res 2 c# type-inference compiler-errors
我试图通过遍历MatchCollection从Regex一个内表达foreach循环,使用var关键字编译器推断那家伙是给我一个错误,对象Value属性是未知的.
foreach (var chapter in ChapterExtractor.Matches(page.RawContent))
{
chapter.Add(chapter.Value); // Does not compile!
}
Run Code Online (Sandbox Code Playgroud)
何时var被Match它取代它完美无缺.
foreach (Match chapter in ChapterExtractor.Matches(page.RawContent))
{
chapter.Add(chapter.Value); // OK!
}
Run Code Online (Sandbox Code Playgroud)
MSDN(http://msdn.microsoft.com/pt-br/library/system.text.regularexpressions.matchcollection ( v=vs.110 ) .aspx)中提供的示例也在循环中使用Match该类foreach.
但是,编译器不应该推断出chapter类型Match而不是object?所以,似乎编译器隐式执行object转换为Match.真的吗?
但是,编译器是否应该推断出chap类型是Match而不是object?
Matches返回一个MatchCollection非泛型的,它的枚举方法返回一个object.因此,编译器无法推断出类型.当你使用时它会起作用,Match因为底层的项目就是这样Match,这就是它不会失败的原因InvalidCastException.
因此,似乎编译器隐式执行从对象到匹配的强制转换.真的吗?
是的,它是真实的.