改进此代码: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那里获得了不错的内联方式,无需创建对象。
Regex matcher = new Regex(@"sday's$");
a.Any(s => matcher.IsMatch(s)).Dump();
虽然我认为你的意思是一个不同的列表方法-根据文档列表。Contains方法不带比较器
如果你不想使用Linq,那么a.Exists
将使用直接在List上的方法做同样的事情。