¿Cómo obtener el tipo T de una instancia de una clase o método genérico en C#?
¡Hola a todos! Soy nuevo en C# y tengo un problema con los tipos genéricos (generics). Supongamos que tengo una clase genérica:
```csharp
public class MyList
{
private List items = new List();
public void Add(T item)
{
items.Add(item);
}
}
```
Y creo una instancia de ella:
```csharp
var intList = new MyList();
```
Ahora, dentro de la clase, quiero saber qué tipo específico tiene T. Por ejemplo, si T es int, quiero imprimir "int" en la consola. Intenté usar `typeof(T)`, pero no funciona en contextos estáticos, y no estoy seguro de cómo obtener el tipo desde una instancia. También he oído que debido al borrado de tipos en tiempo de ejecución, esto puede ser complicado. En Java usaría Class, pero en C# el enfoque es diferente. ¿Cómo puedo obtener correctamente el tipo T de una instancia de una clase o método genérico? ¡Agradecería ejemplos con código!
<<>>
Uso de
{
private List items = new List();
public void PrintType()
{
Console.WriteLine(typeof(T).Name); // Imprime "Int32" para int
}
}
```
Llamando a
Uso de typeof(T) en miembros no estáticos de la clase
En C#, obtener el tipo T dentro de una clase o método genérico es sencillo usando typeof(T) en un contexto no estático. Por ejemplo:
intList.PrintType(); mostrará "Int32" en la consola. Si quieres "int" específicamente, puedes usar typeof(T).Name o mapear tipos conocidos manualmente. A diferencia de Java, C# no sufre de borrado de tipos en genéricos; la información de tipo se conserva en tiempo de ejecución para tipos de referencia y valor, por lo que typeof(T) funciona sin problemas dentro de métodos de instancia o propiedades.