staticListInParentClass.Of类型<派生类型>?</派生类型>

时间:2011-12-21 14:49:27

标签: c#

我很难理解我可以做以下事情。 我有一个带有静态列表的抽象类,它应该存储任何派生类的对象。同样在抽象类中,我有一个方法,它应该只使用调用派生类的对象。但是我怎么能这样做呢? 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
        }
    }

2 个答案:

答案 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();