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

时间:2017-07-03 00:52:59

标签: c# .net-standard

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

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

但是,在netstandard中,Name中的Group属性消失了。我想知道是否有 new 方法可以实现相同的功能,或者这是否是一个错误。

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

现在的解决方法: .Where(grp => ((string)((dynamic)grp).Name).StartsWith("val")),显然不太理想。

2 个答案:

答案 0 :(得分:6)

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

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

即使您定位4.5,您也会在调试器中看到该属性,因为您实际上是在.NET 4.7上运行(因为它是您已安装的版本),并且调试器将向您显示运行时可用的所有内容。但编译器会限制您所定位的.NET(Framework / Standard / ...)的最低版本。

答案 1 :(得分:1)

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

Regex.GetGroupNames Method

找到了有用的示例