在.NET Core和.NET Framework 4.x中,以下代码按预期工作:
var match = Regex.Match(src, pattern)
.Groups
.Cast<Group>()
.Where(grp => grp.Name.StartsWith("val"));
Run Code Online (Sandbox Code Playgroud)
然而,在netstandard,Name
财产Group
已经消失.我想知道是否有一种新的方式来实现同样的事情,或者这是一个错误.
编辑:我首先认为这是一个netstandard 2.0问题,但看起来所有netstandard版本都缺少该属性.
现在的解决方法:
.Where(grp => ((string)((dynamic)grp).Name).StartsWith("val"))
显然不太理想.
根据其在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/...)的最低版本.