迭代器采用委托而不是谓词

Iterator taking a Delegate instead of a Predicate

我知道我可以定义一个谓词:

Dim _predicate As New Func(Of T, Boolean)(Function(e)e.Foo= "Value")

并将其传递给 LINQ 方法:

Dim _x as String = enumerable.First(predicate).Foo

我想抽象出 "Value" 字符串,所以我创建了:

Dim _delegate As New Func(Of T, String, Boolean)(Function(e, s)e.Foo= s)

如何将此委托传递给 LINQ 函数,传递字符串参数但仍然让它每次都假定 T 参数是迭代器项?

我想没有可用的重载来接受这样的委托,但我真的不想为所有 LINQ 方法编写自己的重载...

我想我想要的是一种将委托转换为谓词的内联方式,提供替换该额外参数的值。

抱歉,我不是 VB 人,但我确信我的代码可以轻松翻译:

class ValueFilter<T>
  where T : IFooThing
{
  public ValueFilter(string value)
  {
    _value = value;
  }
  private readonly string _value;

  public IsMatch(T item) => (item.Foo == _value);
}

然后

var filter = new ValueFilter("A value");

IEnumerable<Foo> collection = ...
collection.First(filter.IsMatch);

(假设 IFooThing 有一个 public string Foo { get; } 属性