我需要从C#正则表达式中的匹配集合中删除零长度匹配
我的尝试:
MatchCollection Matches = _RVar.Matches(arg);
List<Match> ValidMatches = Matches.AsEnumerable()
.Where(J => !String.IsNullOrEmpty(J.Value))
.ToList<Match>();
Visual Studio说:
错误1'System.Text.RegularExpressions.MatchCollection'不
包含“ AsEnumerable”的定义,没有扩展方法
'AsEnumerable'接受类型的第一个参数
可以找到'System.Text.RegularExpressions.MatchCollection'(是
您缺少using指令或程序集引用吗?)
但是在此代码项目example上,AsEnumerable是Regex.MatchCollection的方法。
有人知道为什么我得到错误吗?
最佳答案
链接到的样本在AsEnumerable
上定义了自定义MatchCollection
扩展方法。
public static IEnumerable<System.Text.RegularExpressions.Match> AsEnumerable(this System.Text.RegularExpressions.MatchCollection mc)
{
foreach (System.Text.RegularExpressions.Match m in mc)
{
yield return m;
}
}
您可以这样做,也可以使用
Cast
扩展方法:List<Match> ValidMatches
= Matches.Cast<Match>().Where(J => !String.IsNullOrEmpty(J.Value)).
当需要将实现非泛型
Cast
的集合转换为泛型IEnumerable
时,IEnumerable<T>
很有用,这里就是这种情况。