Quiero filtrar objetos en un List<ISeries>
usando su tipo, usando OfType <>. Mi problema es que algunos objetos tienen un tipo de interfaz genérico, pero no tienen una interfaz heredada común.
Tengo las siguientes definiciones:Cómo filtrar a todas las variantes de un tipo genérico usando OfType <>
public interface ISeries
public interface ITraceSeries<T> : ISeries
public interface ITimedSeries : ISeries
//and some more...
Mi lista contiene todos los tipos de ISeries
, pero ahora lo que solo son necesarios los ITraceSeries
objetos, independientemente de su parámetro de tipo genérico realidad definida, así:
var filteredList = myList.OfType<ITraceSeries<?>>(); //invalid argument!
¿Cómo puedo hacer eso?
Una solución unfavored sería introducir un tipo ITraceSeries
que hereda de ISeries
:
public interface ITraceSeries<T> : ITraceSeries
A continuación, utilice ITraceSeries
como filtro. Pero esto realmente no agrega nueva información, sino que solo hace que la cadena de herencia sea más complicada.
Me parece un problema común, pero no encontré información útil sobre SO o la web. ¡Gracias por la ayuda!
Piense en lo que el tipo de retorno de 'myList.OfType' debe ser. –
Debe ser IEnumerable. Pero este es un buen punto, ¿cómo decir eso al método OfType <>? –
Marcel
El tipo de devolución de OfType es el mismo que el parámetro de tipo. –