【问题标题】:How to convert linq selector into predictor如何将 linq 选择器转换为预测器
【发布时间】:2023-04-01 01:25:01
【问题描述】:

我有一个 lambda 选择器,比如说Func<T, TResult>。是否可以使用 TResult 对象作为参考将其转换为预测变量 (Func<T, bool>)?

例如转换

x => x.Name

进入

x => x.Name == customerName

【问题讨论】:

  • 非常感谢 Steven、Timwi 和 Ani。你的答案都是正确的。但我只能将你的一个标记为答案。谢谢大家!

标签: c# generics delegates lambda


【解决方案1】:

这样的?

static Func<TInput, bool> CreatePredicate<TInput, TResult>(Func<TInput, TResult> selector, TResult comparisonValue)
{
    return tInput => selector(tInput).Equals(comparisonValue);
}

用法:

Func<Foo, bool> myPredicate = CreatePredicate(x => x.Name, customerName);

您能告诉我们更多关于您为什么要这样做的原因吗?

【讨论】:

    【解决方案2】:

    试试这个:

    Func<Person, string> projection = x => x.Name;
    
    Func<Person, bool> predicate = x => projection(x) == customerName;
    

    【讨论】:

      【解决方案3】:

      我假设你的意思是

      x => x.Name == customerName
      

      因为= 是赋值,我想你想比较一下。

      答案是:

      static Func<T, bool> MakePredictor<T>(Func<T, string> lambda,
                                            string customerName)
      {
          return x => lambda(x) == customerName;
      }
      

      【讨论】:

        【解决方案4】:
        static Predicate<T> Predicate<T, TResult>(Func<T, TResult> selector, TResult value) {
          return Predicate(selector, value, EqualityComparer<TResult>.Default);
        }
        
        static Predicate<T> Predicate<T, TResult>(Func<T, TResult> selector, TResult value, IEqualityComparer<TResult> comparer) {
          if(selector == null) {
            throw new ArgumentNullException("selector");
          } else if(comparer == null) {
            throw new ArgumentNullException("comparer");
          }
        
          return x => comparer.Equals(selector(x), value);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-11
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          • 2019-04-20
          • 2014-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多