我很难理解我可以做以下事情。 我有一个带有静态列表的抽象类,它应该存储任何派生类的对象。同样在抽象类中,我有一个方法,它应该只使用调用派生类的对象。但是我怎么能这样做呢? GetType()或typeof()的变化尚未成功(无法编译)。
private abstract class Report
{
internal static List<Report> allReports;
internal void Process()
{
//get list of Reports which are of the calling derived type
List<CallingType> reportsOfCallingType = allReports.OfType<CallingType>().ToList();
//do stuff with reportsOfCallingType
}
}
答案 0 :(得分:3)
由于您没有编译时类型,因此无法使用泛型。 (除非你使用CRTP)
相反,写一下
Type myType = GetType();
List<Report> myReports = allReports.Where(myType.IsInstanceOfType).ToList();
答案 1 :(得分:3)
您可以使报告类具有通用性:
private abstract class Report<T> where T : Report<T>
{
internal void Process()
{
List<T> reportsOfCallingType = allReports.OfType<T>().ToList();
//do stuff with derivedReports
}
}
这看起来有点奇怪,但可以这样使用:
public class CallingType : Report<CallingType>
{
}
或者,使用Type.IsInstanceOfType
方法:
var myReports = allReports.Where(GetType().IsInstanceOfType).ToList();