改进此代码:List.包含Regex而不创建新的比较对象

本文关键字:创建 对象 比较 Regex 代码 包含 List | 更新日期: 2023-09-27 18:09:13

我写下这段代码是为了在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那里获得了不错的内联方式,无需创建对象。

改进此代码:List.包含Regex而不创建新的比较对象

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

虽然我认为你的意思是一个不同的列表方法-根据文档列表。Contains方法不带比较器

如果你不想使用Linq,那么a.Exists将使用直接在List上的方法做同样的事情。