gpt4 book ai didi

c# - 枚举 MatchCollection 时,为什么 var 结果是 Object 类型而不是 Match 类型?

转载 作者:可可西里 更新时间:2023-11-01 08:20:08 24 4
gpt4 key购买 nike

我注意到下面的代码有些奇怪:

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'

变量 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 中是必需的,以避免在您的代码中进行强制转换。

(逻辑上即使使用 var 也涉及转换 - 但它始终是从一种类型到相同类型,因此实际上不需要发出任何内容。)有关更多详细信息,请参阅 C# 4 规范的第 8.8.4 节。

关于c# - 枚举 MatchCollection 时,为什么 var 结果是 Object 类型而不是 Match 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com