通用对象方法无法正常工作

时间:2014-11-11 15:23:40

标签: c# .net generics extension-methods

我的扩展程序

public class IQueryableExtensions
{
    public static IQueryable<T> Filter<T>(this IQueryable<T> collection, Expression<Func<T, bool>> where, string value, out bool hasFilter)
    {
        hasFilter = false;
        if (!String.IsNullOrEmpty(value))
        {
            collection = collection.Where(where);
            hasFilter = true;
        }
        return collection;
    }
}

我的代码

IQueryable<GlobalLocation> customers = db.GlobalLocations;
customers.Filter(...); // Doesn't work
IQueryableExtensions.Filter<GlobalLocation>(customers, c => c.TBUID == searchTbuid, searchTbuid, out hasFilter); // Works

尝试通过customers调用它甚至不会出现在intellisense中。为什么这样,可以/如何解决?

3 个答案:

答案 0 :(得分:4)

变化:

public class IQueryableExtensions

要:

public static class IQueryableExtensions

扩展方法应该是静态类中的静态方法。

答案 1 :(得分:2)

您必须将扩展方法放在static类中。

public static class IQueryableExtensions
{
    // Place here your extension methods.    
}

Exntension方法应放在静态类中。

一方不是将静态类的名称从IQueryableExtensions更改为QueryableExtensions,它是类而不是接口。除了明确QueryableExtensions是一个类而不是一个接口之外,这不会有任何区别。

答案 2 :(得分:1)

扩展类和方法签名必须是静态的。

使用

public static class IQueryableExtensions