Básicamente tengo una lista de objetos donde cada objeto podría implementar un conjunto diferente de las interfaces:lista de filtrado usando múltiples clases/interfaces
List<BaseObject> objects;
class BaseObject
{
public void DoStuff();
}
interface IX
{
void DoX();
}
interface IY
{
void DoY();
}
interface IZ
{
void DoZ();
}
y me gustaría escribir algo como esto:
foreach(var obj in objects.OfType<BaseObject and IX>)
{
obj.DoStuff();
obj.DoX();
}
(Ej llevo a cabo un algoritmo específico para los objetos de tipo BaseObject y IX sin tener que hacer typecasts allí)
¿es posible hacerlo en C#? ¿Cuál es la solución más elegante?
Puedo hacer esto:
foreach(var obj in objects.OfType<IX>)
{
var baseobj = (BaseObject)obj.DoStuff();
obj.DoX();
}
pero me resulta desagradable.
Y podría necesitar aplicar operaciones específicas a los tipos que implementan, por ejemplo, la interfaz IX y la interfaz IZ.
foreach(var obj in objects.OfType<BaseType and IX and IZ>)
{
obj.DoStuff();
obj.DoX();
obj.DoZ();
}
Creo que perdería intellisense allí, ¡pero se ve genial! – JBeurer
@JBeurer, sí, es una compensación :) –