1
resposta

Passando argumento genérico

public static void AdicionarVarios<T>(this List<T> lista, params T[] itens)
{
        foreach(T item in itens)
        {
                lista.Add(item);
        }
}

Olhando esse código, não poderia ser passar string no como argumento, pois string não é uma classe genérica, logo temos que dizer que a classe é um int. Não fica esquisito e bagunçado o método ser int e os parâmetros passados serem do tipo string ? Como funciona isso ?

1 resposta

Olá, Wendel

Entendo sua confusão, mas acho que posso ajudar a esclarecer. O código que você está olhando é um exemplo de um método genérico. Em C#, quando vemos <T>, isso não significa que T é uma string ou um int, mas sim que T é um tipo genérico. Isso significa que T pode ser qualquer tipo.

No seu exemplo, o método AdicionarVarios<T> está sendo definido para operar em uma List<T>, onde T é qualquer tipo. Quando você chama esse método, você especifica o tipo que T deve ser. Então, se você tem uma List<string>, você pode chamar AdicionarVarios<string> e passar um array de strings como argumento. Da mesma forma, se você tem uma List<int>, você pode chamar AdicionarVarios<int> e passar um array de inteiros.

Por exemplo:

List<string> minhaLista = new List<string>();
minhaLista.AdicionarVarios("Olá", "Mundo");

List<int> minhaListaInt = new List<int>();
minhaListaInt.AdicionarVarios(1, 2, 3, 4);

Nesses exemplos, o método AdicionarVarios<T> é chamado com T sendo string no primeiro caso e int no segundo. O importante é que os tipos de T e os argumentos passados para o método são consistentes.

Portanto, não é esquisito nem bagunçado. É uma maneira flexível de escrever métodos que podem operar em muitos tipos diferentes de dados.

Espero ter ajudado e bons estudos!