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!