繁体   English   中英

差异var和类型。 为什么var不起作用?

[英]difference var and Type. Why doesnt var work here?

我不明白为什么var m不会返回Match。 我没有检查,但它似乎返回一个对象。

        foreach (var m in Regex.Matches("dummy text", "(mm)"))
            var sz = m.Groups[1]; // error CS1061: 'object' does not contain a definition for 'Groups' and no extension method 'Groups' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

        foreach (Match m in Regex.Matches("dummy text", "(mm)"))
            var sz = m.Groups[1]; //ok

Regex.Matches返回实现IEnumerable而不是IEnumerable<Match> MatchCollection

因此,默认项类型是object。 foreach中使用项目类型Match时,您将获得预期的项目类型。

MatchCollection实现IEnumerable而不是IEnumerable<Match>因此编译器只能将变量的类型推断为object而不是Match

var编译时从其初始化的表达式的类型推断变量的类型。 Matches返回MatchCollection ,它实现旧学校IEnumerable而不是通用IEnumerable<Match> IEnumerable.GetEnumerator()返回的枚举数返回的Current属性的类型是object 因此, var将推断m的类型为object而不是Match

当您在foreach语句中显式指定类型并且枚举数的返回类型不同时,编译器将以静默方式插入强制转换指令以使其工作。 在这种情况下,不能执行其他编译时检查,如果失败,它将在运行时抛出InvalidCastException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM