netstandard - 正则表达式,无法访问组名

netstandard - Regular Expression, Group Name inaccessible

在 .NET Core 和 .NET Framework 4.x 中,以下代码按预期工作:

var match = Regex.Match(src, pattern)
    .Groups
    .Cast<Group>()
    .Where(grp => grp.Name.StartsWith("val"));

然而,在netstandard中,Group中的Name 属性没有了。我想知道是否有 new 方法来实现同样的事情,或者这是否是一个错误。


编辑:我最初以为这是一个 netstandard 2.0 问题,但看起来所有 netstandard 版本都缺少 属性。

目前的解决方法: .Where(grp => ((string)((dynamic)grp).Name).StartsWith("val")),明显不太理想

根据 its entry on apisof.net,此 属性 仅适用于 .NET Core 1.1 和 .NET Framework 4.7 及更高版本,尚未添加到任何版本的 .NET Standard 中。在其他平台(较低的 .NET 版本、Xamarin 等)上,您的解决方法可能会在运行时抛出异常。

如果您绝对需要在库中使用此 属性,我建议多目标 net47;netcoreapp1.1 而不是目标 .NET Standard 版本。

即使您的目标是 4.5,您也会在调试器中看到 属性,因为您实际上是 运行 on .NET 4.7(因为它是您安装的版本)并且调试器将显示你在运行时可用的一切。但是,编译器会限制您所针对的 .NET 的最低版本 (Framework/Standard/…)。

可以通过 Regex.GetGroupNames() 访问命名组,它也适用于 .NET Standard

Regex.GetGroupNames Method

找到了有用的样本