Return 列表<this>

Return List<this>

是否可以使用 this.GetType() 作为 List 的类型?
我有以下 class 被几个对象继承:

public class MainRepository
{
    // ??? should be the type of this
    public List<???> GetAll()
    {
        return new List<???>();
    }
}

我知道它可以像这样作为通用方法来完成:

    public List<T> GetAll<T>()
    {
        return new List<T>();
    }

但是我想知道是否可以不在调用方法中显式定义类型来完成。

我相信你可以做到这一点,如果这对你来说是一个可行的选择?:

public class MainRepository<T>
{
    public List<T> GetAll()
    {
        return new List<T>();
    }
}

如果我没记错的话,那应该允许您在调用方法时无需在方法调用中指定类型(尽管您显然必须为 class 指定它)。

我假设您想这样做是为了拥有一些通用的通用存储库,它可以被 classed 或类似的东西?然后你可以做类似的事情(只是一个粗略的想法):

public class BaseRepo {

}

public class MainRepository<T> : BaseRepo where T : BaseRepo{

    public List<T> GetAll(){
        return new List<T>();
    }
}

这只能通过反射实现,因为对象的真实类型只有在运行时才知道。因此,您必须将方法设计为 return 所有列表的公共基础 class,即 .NET 中的对象,并在方法中动态创建列表。

public object GetAll()
{
    return System.Activator.CreateInstance(typeof(List<>).MakeGenericType(this.GetType()));
}

但是,我不明白你为什么要这样做。