J'ai trouvé beaucoup de questions similaires mais rien avec tout à fait la réponse que je suis après. Une partie de mon problème est due à l'incapacité d'utiliser des génériques dans les attributs. Je suis probablement en train d'essayer de compliquer les choses, donc si vous pouvez trouver une façon plus simple de faire cela, je suis tout ouïe.IList <variableType>; Résoudre sans génériques
Mon problème spécifique concerne ASP.NET MVC, en utilisant des attributs (filtres) sur une méthode d'action. Je suis en train de créer un filtre qui paginera les résultats transmis à la ViewData.Model comme ceci:
[PagedList(PageSize = 2, ListType = typeof(Invoice))]
public ViewResult List()
{
var invoices = invoicesRepository.Invoices; // Returns an IQueryable<Invoice>
return View(Invoices);
}
OnActionExecuted override Mon filtre ressemble alors:
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ViewResult result = (ViewResult)filterContext.Result;
var list = (IQueryable<?>)result.ViewData.Model; // Here I want to use the ListType in place of the ?
// Perform pagination
result.ViewData.Model = list.Skip((Page - 1) * PageSize).Take(PageSize.ToList();
}
Je me rends compte que je pouvais remplacer mon
var list = (IQueryable<?>)result.ViewData.Model;
Avec
var list = (IQueryable)result.ViewData.Model;
IQueryable<Object> oList = list.Cast<Object>();
Mais mon avis est fortement typée d'attendre une
IQueryable<Invoice>
pas
IQueryable<Object>
Je voudrais toujours passer le type en quelque sorte, et c'est la partie que je suis coincé sur: Type de type = typeof (Facture); // Je peux transmettre ceci comme attribut myNewMethod(); // Mais je ne peux pas faire ça? –
jeef3
J'ai édité la réponse avec un exemple de code. – Tinister
ah oui, parfait! – jeef3