Я получаю следующую ошибку компилятора
Невозможно преобразовать тип 'T' в 'ProjectReportingHandler'
для линии
var projectReport = (ProjectReportingHandler)result.Report;
при попытке скомпилировать:
public abstract class ReportingHandler
{
    // Report stuff
}
public abstract class ProjectReportingHandler: ReportingHandler
{
    // Report stuff
    // Project specific report stuff
}
public class ReportInstance<T>
    where T : ReportingHandler
{
    public T Report { get; private set; }
}
public class ReportLibraryEntry<T>
        where T : ReportingHandler
{
    public ReportInstance<T> Create()
    {
        ReportInstance<T> result = new ReportInstance<T>();
        if (result.Report is ProjectReportingHandler)
        {
            var projectReport = (ProjectReportingHandler)result.Report;
            // do stuff with project reports
        }
        return result;
    }
}
Любые идеи о том, как привязать свойство связанного родового типа result.Report к ProjectReportingHandler?
Я бы подумал, что where T : ReportingHandler гарантировал бы, что это возможно: (
EDIT: Кажется, я получаю несколько ответов, которые говорят, что мой принятый ответ неверен. Он работает, и я реализовал его следующим образом:
public ReportInstance<T> Create()
{
    ReportInstance<T> result = new ReportInstance<T>();
    ReportingHandler report = result.Report;
    if (report is ProjectReportingHandler)
    {
        var projectReport = (ProjectReportingHandler)report;
        // do stuff with project reports
    }
    return result;
}
Почему пустые голоса за ответ, который сработал?: (
