我有两个问题基本上是指相同的范围:
我的具体问题:
我有2个课程:用户,汽车 我想添加返回IQueryable<>的create extension方法,并对两种类型使用相同的方法。 有可能吗?
更一般的问题: 使用泛型我可以返回任何对象类型。是否可以将返回类型限制为特定类型(仅限我的用户和汽车类)?
谢谢
答案 0 :(得分:4)
如果Users和Cars共享相同的祖先或实现公共接口,则可以创建适用于这两个类的扩展方法。
public interface X {}
public class Car : X {}
public class User : X {}
public static class Xtensions
{
public static Xtension( this X target ) {}
}
我看不到你的代码,但我想知道这是不是代码味道......
但是,如果您可以访问代码/类,为什么不这样做:
public class X
{
public virtual void CommonStuff() { }
}
public class Car : X {}
public class User : X {}
通过使CommonStuff
为虚拟,您可以在任何特定情况下覆盖实现(如有必要)。
可以限制泛型:查看this文章。
答案 1 :(得分:1)
如果User和Care基于相同的基类,比如Base,则可以执行以下操作:
MyGenericType<T> where T : Base
通常,您可以指定Base,无论您指的是User还是Car。在扩展方法或其他方法中。相同。
但是,如果User和Car不共享相同的基类,那么您必须实现一个通用接口将它们绑定在一起。例如:
class User : IMyInterface...
class Car : IMyInterface...
MyGenericType<T> where T : IMyInterface
你必须有某些东西才能将两个类绑在一起。否则,您不能只指定任何两个类以供编译器强制执行。