COMO PASSAR UM PARAMETRO DA CLASSE<T> ?

VERA.PALI 02/11/2022 20:18:55
#500693
Duvida, considerando que tenho

public class PaginatedViewModel<T>


Eu gostaria de nao passar o tipo para outros momento do codigo, exemplo

public static IHtmlContent Pager(this IHtmlHelper htmlHelper, string controller, string action, PaginatedViewModel<?????> viewmodel)


Ou seja, receber qualquer que fosse o objeto usado para instanciar PaginatedViewModel, eu so consegui se deixo explicito o tipo , exemplo PaginatedViewModel<Banana>
Porem meu Pager usara varios tipos (PaginatedViewModel<Banana>, PaginatedViewModel<Laranja) e nao quero ficar declarando um-a-um
KERPLUNK 02/11/2022 23:17:02
#500696
Resposta escolhida
Os objetos que serão passíveis de serem paginados, podem herdar alguma interface e daí ao invés de herdar o objeto em si, herde a interface:

public interface IPaginavel
....

public class PaginatedViewModel<IPaginavel>
...

public class Banana : IPaginavel
...


Assim, sempre que for passar o parâmetro, pode passar o objeto que quiser, desde que ele herde de IPaginavel
OCELOT 03/11/2022 17:35:14
#500712
Difícil dizer com certeza o que pode ser feito, mas talvez voce possa fazer o o seu método Pager ser genérico pra aceitar qualquer tipo de PaginatedViewModel<T>
public static IHtmlContent Pager<T>(this IHtmlHelper htmlHelper, string controller, string action, PaginatedViewModel<T> viewmodel)

E no geral não é nem preciso dizer o tipo na hora de chamar pois ele deve inferir o tipo pelo parâmetro passado, mas como me parece ser algo para usar com nos *.cshtml eu não me recordo se ele também é capaz de inferir os tipos genéricos, eu chutaria que sim mas não tenho certeza.
WEBMASTER 05/11/2022 13:39:13
#500733
É Ocelot, nao vai rolar ficar fazendo desse jeito ( com <T>) pois tem que ficar "tipando" para cada caso.
Kerp, de fato usar uma interface vai ser o jeito mais pratico mesmo, nao era o que eu queria, pensei que daria para generalizar no momento da passagem do parametro.. algo como <Object> mas pelo jeito nao vai rolar.
Tinha pensado mesmo em usar Interface mas achei que nao ficaria legal
Tópico encerrado , respostas não são mais permitidas