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

发布于 2024-08-13 19:56:42 字数 228 浏览 5 评论 0原文

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

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

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

我猜想,任何包含从同一基类继承的对象的通用列表都会出现此问题。

这个问题有解决办法吗?

编辑:在 C# 中工作

I have 2 objects Project and License. They both inherit from the object Entity (abstract class).

Now I have an extension method "GetNewId" that contains logic to get the next id in a list of entities.

I've defined this method as an extension method, but the problem is that List (which is also a list of entities) and List don't see this method.

I guess that this problem will occur with any generic list containing objects that inherit from the same base class.

Is there a solution for this problem?

edit: working in C#

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦里人 2024-08-20 19:56:42

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

如果您将其作为 IEnumerable 的扩展 - 其中 T 仅限于从您的 Entity 基类派生 - 您应该能够在任何包含基于 Entity 的对象的类集合:

public static GetNewId<T>(this IEnumerable<T> sequence) where T : Entity {
    // your implementation of GetNewId here
}

Cast 方法(来自 System.Linq)也在 IEnumerable< 上定义/code> (但对于任何类型 T,没有限制),因此您可以在您的许可证 实例上使用它。

What class/interface is your GetNewId() method an extension of?

If you make it an extension of IEnumerable<T> - where T is restricted to be derived from your Entity base class - you should be able to use the extension method on any collection like class containing Entity based objects:

public static GetNewId<T>(this IEnumerable<T> sequence) where T : Entity {
    // your implementation of GetNewId here
}

The Cast method (from System.Linq) is also defined on IEnumerable<T> (but on any type T, no restrictions), hence you can use it on your licenses instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文