IQueryable<>扩展方法
我有两个基本上涉及相同范围的问题:
-
我的具体问题:
我有 2 个类别:用户、汽车 我想添加返回 IQueryable<> 的创建扩展方法,并对两种类型使用完全相同的方法。 可能吗?
-
更一般的问题: 使用泛型我可以返回任何对象类型。是否可以将返回类型限制为特定类型(仅限我的 User 和 Cars 类)?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果用户和汽车共享相同的祖先,或实现公共接口,则可以创建适用于这两个类的扩展方法。
我看不到你的代码,但我想知道这是否不会有代码味道......
但是,如果你有权访问代码/类,为什么不这样做:
通过制作
CommonStuff
虚拟,您可以在任何特定情况下重写实现(如果需要)。可以限制泛型:检查此文章。
If Users and Cars share the same ancestor, or implement a common interface, then it is possible to create an extension method that is applicable to both classes.
I cannot see your code, but I wonder if this is not going to be a code-smell ...
But, if you have access to the code / classes, why don't you do it like this:
By making
CommonStuff
virtual, you can override the implementation in any specific case (if necessary).Generics can be constrained: check this article.
如果 User 和 Care 基于相同的基类(例如 Base),那么您可以执行以下操作:
一般来说,无论您指的是 User 还是 Car,都可以指定 Base。在扩展方法或其他方法中。相同的。
但是,如果 User 和 Car 不共享相同的基类,那么您必须实现一个公共接口将它们连接在一起。例如:
您必须有一些东西来将两个类联系在一起。否则,您不能只指定任何两个类供编译器强制执行。
If User and Care are based on the same base class, say Base, then you can do things like:
In general, you can specify Base wherever you mean either User or Car. In extension methods or other methods. Same.
However, if User and Car do not share the same base class, then you'll have to implement a common interface to tie them together. For example:
You have to have something to tie the two classes together. Otherwise, you cannot just specify any two classes for the compiler to enforce.