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 に答える