IQueryable<比;扩展方法

本文关键字:扩展 方法 IQueryable | 更新日期: 2023-09-27 17:48:58

我有两个问题,基本上涉及相同的范围:

  1. 我的具体问题:

    我有两个类:用户,汽车我想添加创建扩展方法,它返回IQueryable<>,并使用两种类型的完全相同的方法。这可能吗?

  2. 更一般的问题:使用泛型,我可以返回任何对象类型。是否可以将返回类型限制为特定类型(仅限我的User和Cars类)?

谢谢

IQueryable<比;扩展方法

如果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为虚拟,您可以在任何特定情况下(如果需要)重写实现。

泛型可以被约束:查看本文

如果User和Care基于相同的基类,比如base,那么您可以这样做:

   MyGenericType<T> where T : Base

一般情况下,您可以在表示User或Car的地方指定Base。在扩展方法或其他方法中。相同。

但是,如果User和Car不共享相同的基类,则必须实现一个公共接口将它们绑定在一起。例如:

class User : IMyInterface...
class Car : IMyInterface...
MyGenericType<T> where T : IMyInterface

你必须有一些来把这两个类联系在一起。否则,你不能只指定任意两个类让编译器强制执行。