将func从method参数传递给LINQ方法(泛型类型)

时间:2009-10-01 21:37:55

标签: c# linq generics

在方法的签名中,我指定了一个Func,如下所示:

public void Method (Func<string, bool> func)

在LINQ中,哪个方法(来自IEnumerable)会让我将Func从method参数传递给LINQ查询?另一个问题是,我的func可以有任何类型的参数,所以IEnumerable / LINQ中的Method必须支持泛型类占位符。

我想写这样的东西:

// Get all elements of type T from the webpage (find is an object in an external API to look for elements in a page).

IEnumerable<T> images = find.GetAllByTagName<T>().All(func);

// Where func is a method parameter which is assigned at run time by the consumer of this API:

public void Test (Func<T, bool> func) { }

我怎样才能做到最好?我在.NET 3.5

由于

3 个答案:

答案 0 :(得分:1)

将您的API签名更改为打开:

public void Method<T> (Predicate<T> func)

您的消费者会使用类型T关闭通用签名,并提供适当的谓词。

使用LINQ的实际方法实现将使用Joel提到的Where()

编辑:将func更改为谓词

其他编辑:

我个人会返回一个IEnumerable,表示由传入的谓词约束的结果集:

public IEnumerable Method<T> (Predicate<T> func)
{
    return find.Where(func)
}

我正在对你要做的事做一些假设,如果这是你的意图,请告诉我。

答案 1 :(得分:1)

  

在LINQ中,哪个方法(来自IEnumerable)会让我将Func从method参数传递给LINQ查询?

LinqToObjects的扩展方法在静态System.Linq.Enumerable类上挂起。


鉴于您的Func签名,您可能希望Enumerable.Where重载this

IEnumerable<T> Enumerable.Where<T>(this IEnumerable<T> source, Func<T, bool> filter)

答案 2 :(得分:0)

  

在LINQ中,哪种方法(来自   IEnumerable)会让我通过一个   Func从method参数到   LINQ查询?

这个问题对我来说有点模糊。如果您正在寻找仅返回Func指定的匹配项的过滤器算法,请使用.Where方法:

public void Method (Func<string, bool> func)
{
    return find.GetAllByTagName<T>().Where(func);
}

这会回答你的问题吗?如果没有,请澄清你想要做的事情。