Dar una clase base Base
, quiero escribir un Método de ensayo, así:Cómo averiguar si un tipo de objeto implementa IEnumerable <X> donde X se deriva de Base utilizando Reflexión
private static bool Test(IEnumerable enumerable)
{
...
}
tal que prueba devuelve verdadero si el tipo de o implementa cualquier interfaz de IEnumerable<X>
donde X
deriva de Base
, por lo que si me gustaría hacer esto:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
if (Test(enumerable))
{
return enumerable.Cast<Base>().Select(b => b.SomePropertyThatIsString);
}
return enumerable.Cast<object>().Select(o => o.ToString());
}
... que sería hacer lo correcto, usando Reflecti en. Estoy seguro de que es una cuestión de recorrer todas las interfaces del tipo para encontrar la primera que coincida con los requisitos, pero estoy teniendo dificultades para encontrar el genérico IEnumerable<>
entre ellos.
Por supuesto, podría considerar esto:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
return enumerable.Cast<object>().Select(o => o is Base ? ((Base)o).SomePropertyThatIsString : o.ToString());
}
... pero pensar en él como un experimento mental.
Sus fragmentos de código no tienen sentido, ¿de dónde viene "o"? –
Quizás deberías leer sobre las expresiones lambda. –