C # bucle sobre una matriz de dimensiones desconocidas
Quiero crear un método de extensión para recorrerSystem.Array
con un número desconocido de dimensiones
Por ahora estoy usando un enfoque ingenuo:
public static void ForEach<T>(this Array source, Action<T> action)
{
if(source.Rank == 1)
{
for (int w = 0; w < source.GetLength(0); w++)
{
action((T)source.GetValue(w));
}
}
else if(source.Rank == 2)
{
for (int h = 0; h < source.GetLength(1); h++)
{
for (int w = 0; w < source.GetLength(0); w++)
{
action((T)source.GetValue(h, w));
}
}
}
else if(source.Rank == 3)
{
// etc
}
}
Estoy seguro, hay una forma mucho más elegante de hacerlo. Pero no puedo entenderlo. ¿Cómo generalizo ese método para un número ilimitado de dimensiones?