加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:02:14 所属栏目:百科 来源:网络整理
导读:我注意到以下代码似乎奇怪的东西: 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' 变量匹配类型为Objec
我注意到以下代码似乎奇怪的东西:
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节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读