如何为通用列表创建灵活的扩展方法?

时间:2009-12-08 10:40:48

标签: c# generics inheritance extension-methods generic-list

我有2个对象项目和许可证。它们都继承自对象Entity(抽象类)。

现在我有一个扩展方法“GetNewId”,其中包含获取实体列表中下一个id的逻辑。

我已经将此方法定义为扩展方法,但问题是List(也是实体列表)和List没有看到此方法。

我猜这个问题会出现在包含从同一基类继承的对象的任何通用列表中。

这个问题有解决方案吗?

编辑:在C#中工作

1 个答案:

答案 0 :(得分:3)

您的GetNewId()方法的哪个类/接口是扩展名?

如果你将它作为IEnumerable<T>的扩展 - 其中T被限制为从你的Entity基类派生 - 你应该能够在包含{{的类的任何集合上使用扩展方法基于1}}的对象:

Entity

public static GetNewId<T>(this IEnumerable<T> sequence) where T : Entity { // your implementation of GetNewId here } 方法(来自Cast)也在System.Linq上定义(但对于任何类型T,没有限制),因此您可以在IEnumerable<T>上使用它实例