我需要从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>很有用,这里就是这种情况。

10-02 16:42