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

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

但是,在netstandard中,Name中的Group属性消失了。我想知道是否有一种实现相同目标的新方法,或者这是否是一个错误。

编辑:我首先认为这是一个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,也会在调试器中看到该属性,因为您实际上是在.NET 4.7上运行的(因为它是已安装的版本),并且调试器将向您显示在运行时可用的所有内容。但是,编译器会限制您所针对的.NET最低版本(框架/标准/…)。

关于c# - netstandard-正则表达式,无法访问组名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44876468/

10-11 02:30