【问题标题】:How do I implement a matching algorithm using predicates?如何使用谓词实现匹配算法?
【发布时间】:2009-08-18 23:02:02
【问题描述】:

我了解如何使用委托,并且可以使用 lambda 表达式来使用谓词。我已经到了一个地步,我想实现一个使用谓词作为参数的方法,但不知道如何引用谓词来查找我的集合中的匹配项:

private static T FindInCollection<T>(ICollection<T> collection, Predicate<T> match)
{
    foreach (T item in collection)
    {
        //So how do I reference match to return the matching item?
    }
    return default(T);
}

然后我想用类似的东西来引用它:

ICollection<MyTestClass> receivedList = //Some list I've received from somewhere else
MyTestClass UsefulItem = FindInCollection<MyTestClass>(receivedList, i => i.SomeField = "TheMatchingData");

如果有人能给我解释或指出有关谓词实现的参考,我将不胜感激。那里的文档似乎都与传递谓词有关(我可以做得很好),而不是实际实现使用它们的功能......

谢谢

【问题讨论】:

  • 为什么不能使用Where方法?
  • @Cameron:天哪!我无法使用它的原因是因为我没有引用 System.Linq,哈哈!我以为我可以使用它,但它没有出现在智能感知中。我要多睡一会儿。大声笑,谢谢。
  • @Cameron:虽然,能够实现总是有用的,所以提供的答案 - 虽然现在多余,但在其他情况下可能仍然有用。

标签: c# generics predicate


【解决方案1】:
private static T FindInCollection<T>(ICollection<T> collection, Predicate<T> match)
{
    foreach (T item in collection)
    {
        if (match(item))
            return item;
    }
    return default(T);
}

您只需像使用其他任何委托一样使用谓词。它基本上是一个你可以使用任何类型 T 的参数调用的方法,它会返回 true。

【讨论】:

  • 谢谢,我只是找不到任何关于这个简单缺失的拼图的任何信息。感谢您的快速回复! +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多