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
。
找到了有用的样本
在 .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
。