c# – 枚举MatchCollection时,为什么var会导致Object类型而不是Match类型?

前端之家收集整理的这篇文章主要介绍了c# – 枚举MatchCollection时,为什么var会导致Object类型而不是Match类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我注意到以下代码似乎奇怪的东西:
MatchCollection mc = Regex.Matches(myString,myPattern);
foreach(var match in mc)
    Console.WriteLine(match.Captures[0]); // <-- this line is invalid,unless I replace 'var' above with 'Match'

变量匹配类型为Object而不是Match.我习惯使用var枚举集合,没有这样的问题.为什么MatchCollection不同?

解决方法

MatchCollection是在.NET 2之前编写的,所以它只是实现IEnumerable而不是IEnumerable< T>.但是,您可以使用Cast轻松修复此问题:
foreach(var match in mc.Cast<Match>())

如果你给变量一个显式类型,像这样:

foreach(Match match in mc)

那么C#编译器会自动为每个项目插入一个转换.这在C#1中是必需的,以避免在您的代码中投射.

(在逻辑上,即使使用了一个转换,但是它总是从一个类型到同一个类型,所以实际上不需要发出.)有关更多详细信息,请参见C#4规范的8.8.4节.

猜你在找的C#相关文章