用于原始参数的扩展方法

时间:2011-10-24 07:49:21

标签: c# generics extension-methods constraints

我有一个以这种方式声明的扩展方法:

public static IEnumerable<TEntity> AsEnumerable<TEntity>(this IDBQueryable<TEntity> dbQueryable) where TEntity : class
{
    return dbQueryable.Query.AsEnumerable();
}

使用样本将是下一个:

//It works properly
IDBQueryable<Customer> customers = GetCustomerSet();
customers.AsEnumerable();

// It cannot be compiled because int type doesn't fullfill
// the constrains of the extension method
// It must be a reference type in order to be passed as a parammeter.
IDBQueryable<int> customerIDs = GetCustomerIDs();
customers.AsEnumerable();

如何使用适用于我所展示的两个用例的扩展方法? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

只需删除where TEntity : class约束即可。这里没有明显需要约束,任何: class: struct的使用都会阻止这两种用例中的一种。