繁体   English   中英

为什么 RegularExpressions.GroupCollection 可枚举不适用于 Linq 扩展方法?

[英]Why does RegularExpressions.GroupCollection enumerable not work with Linq extension methods?

我在 C# 中使用正则表达式,当您测试正则表达式时,您可以获得捕获组的列表,这是System.Text.RegularExpressions.GroupCollection的一个实例。

所有关于正则表达式的东西都不相关。 相关的是我无法使用 LINQ 扩展方法(如WhereFirst等)查询GroupCollection的实例,Visual Studio 只是告诉我这些方法不存在。

最初我认为这不是可查询的类型,但是通过查看 Visual Studio 中的 class 声明,它看起来像这样:

public class GroupCollection : ICollection<Group>, IEnumerable<Group>, IEnumerable,
    IEnumerable<KeyValuePair<string, Group>>, IList<Group>,
    IReadOnlyCollection<KeyValuePair<string, Group>>, IReadOnlyCollection<Group>,
    IReadOnlyDictionary<string, Group>, IReadOnlyList<Group>, ICollection, IList
{
    ...
}

现在,如果我错了请纠正我,但 LINQ 不应该在任何IEnumerable<T>上可用吗? 我这样想是不是错了? 我错过了什么?

您需要访问 Values 属性。

GroupCollection c;

c.Values.Where ...

值属性是 Group 的 IEnumerable。

PS 我在 GroupCollection 的声明中看到了这个:

public class GroupCollection : 
    IList<Group>, 
    IReadOnlyList<Group>, 
    IList, 
    IReadOnlyDictionary<string, Group>

尽管 IList 应该派生自 IEnumerable,所以,是的,对于为什么我们在 GroupCollection class 上看不到 Linq 方法也有点困惑。

显然,我没有考虑一个重要的细节:我正在编写的代码是针对 .NET 的多个版本的库的一部分:

<TargetFrameworks>net5.0-windows;netcoreapp3.1;net461</TargetFrameworks>

显然,在 .NET 4.6.x 中, GroupCollection class 没有实现IEnumerable ,因此 LINQ 表达式不可用的原因。

Visual Studio 在查看内部框架代码时显然会向您显示列表中第一个框架的定义,所以我看到的是 .NET 5 的定义

暂无
暂无

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

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