usando una tipos tipo ser referencia parametrizada genéricos genericos genericas debe cuando colecciones clases clase c# .net generics types

c# - tipos - .NET: ¿Cómo verificar el tipo dentro de una clase genérica?



tipos genéricos java (3)

¿Cómo obtengo el tipo de clase genérica dentro de la clase?

Un ejemplo:

Construyo una colección genérica de tipeo implementando ICollection <T> . Dentro de mí tengo métodos como

public void Add(T item){ ... } public void Add(IEnumerable<T> enumItems){ ... }

¿Cómo puedo preguntar dentro del método por el tipo dado T ?

La razón de mi pregunta es: si el objeto se usa como T, la colección usa Agregar (elemento de objeto) en lugar de Agregar (IEnumerable <objeto> enumItems) incluso si el parámetro es IEnumerable. Entonces, en el primer caso agregaría toda la colección enumerable como un objeto en lugar de múltiples objetos de la colección enumerable.

Entonces necesito algo como

if (T is object) { // Check for IEnumerable }

pero por supuesto eso no puede funcionar en C #. Sugerencias?

¡Muchas gracias!

Miguel


Personalmente, IEnumerable<T> el problema al cambiar el nombre del IEnumerable<T> a AddRange . Esto evita estos problemas y es coherente con las API existentes, como List<T>.AddRange .

También mantiene las cosas limpias cuando la T que desea agregar implementa IEnumerable<T> (raro, lo admitiré).


Puede usar: typeof(T)

if (typeof(T) == typeof(object) ) { // Check for IEnumerable }


Si desea utilizar el operador is en una clase / método genérico, debe limitar T a un tipo de referencia:

public void MyMethod<T>(T theItem) where T : class { if (theItem is IEnumerable) { DoStuff(); } }