1

我放弃了这段代码以在 LinqPad 中实现 List.Contains() 的 Regex 变体。不幸的是,它迫使人们创建一个对象来进行比较,当然静态类不能实现接口。有没有办法在不创建单独的对象进行比较的情况下达到相同的结果?

void Main()
{
    var a = new List<string>();
    a.Add(" Monday ");
    a.Add(" Tuesday ");
    a.Add(" Wednesday ");
    a.Add(" Thursday ");
    a.Add(" Friday ");

    a.Contains(@"sday\s$", new ListRegexComparer() ).Dump();
}

// Define other methods and classes here
class ListRegexComparer : IEqualityComparer<string>
{

    public bool Equals(string listitem, string regex)
    {
        return Regex.IsMatch(listitem, regex);
    }


    public int GetHashCode(string listitem)
    {
        return listitem.GetHashCode();
    }

}

编辑:

a.Any(s => Regex.IsMatch(s, @"(?i)sday\s$")).Dump()

不错,内嵌的方式,无需创建对象,来自 Chris Tavares 和 Jean Hominal。

4

1 回答 1

2
Regex matcher = new Regex(@"sday\s$");
a.Any(s => matcher.IsMatch(s)).Dump();

尽管我认为您的意思是不同的列表方法-根据文档, List.Contains 方法不需要比较器。

如果您不想使用 Linq,那么a.Exists将使用直接在 List 上的方法执行相同的操作。

于 2013-04-14T23:22:46.537 回答