Je reçois l'erreur du compilateur suivantpropriété générique Cast de type T à un type d'héritage connu
Impossible de convertir le type 'T' à 'ProjectReportingHandler'
pour la ligne
var projectReport = (ProjectReportingHandler)result.Report;
en essayant de compiler:
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;
}
}
Des idées comment transformer la propriété de type générique liée result.Report
en ProjectReportingHandler
?
j'aurais pensé que le where T : ReportingHandler
aurait assuré que cela était possible :(
EDIT: Je semblent obtenir quelques réponses qui disent ma réponse acceptée est incorrecte Il fonctionne, et je mis en œuvre comme suit.:
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;
}
Pourquoi les voix vers le bas pour une réponse qui a fonctionné :(
Cela peut jeter un 'InvalidCastException'. – SLaks
Super, merci! On dirait que cela devrait être un truc de compilateur intégré, car je ne vois pas pourquoi empêcher cela avec l'erreur susmentionnée est utile: s – Codesleuth
@SLaks: Même quand j'ai le code dans le 'if (result.Report est ProjectReportingHandler) 'bloquer? – Codesleuth