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()));
}
但是,我不明白你为什么要这样做。
是否可以使用 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()));
}
但是,我不明白你为什么要这样做。