Pregunta

Estoy teniendo un poco de problemas para averiguar cómo llamar a la Parallel.ForEach con una matriz 2D de cadenas:

string[,] board = new string[,]{
        {"A", "B", "C", "D", "E" },
        {"F", "G", "H", "I", "J"},
        {"K", "L", "M", "N", "O"},
        {"0", "1", "2", "3", "4"}};

Parallel.ForEach(board, row =>
    {
        for (int i = 0; i < row.Length; ++i)
        {
            // find all valid sequences
        }
    });

Si yo no especificar explícitamente el tipo me sale el siguiente error:

El tipo de argumentos para el método 'Sistema.Las operaciones de roscado.Tareas.En paralelo.ForEach(Del Sistema.Las colecciones.Genérica.IEnumerable, Sistema.Acción)' no se puede inferido a partir del uso.Trate de especificar el tipo de argumentos de forma explícita.

¿Cuál es la forma correcta para especificar el tipo de argumentos explícitamente?

¿Fue útil?

Solución

El problema es que 2 dimensiones de las matrices no se implementan IEnumerable<one-dimensional-array>.(No aplicar IEnumerable, pero es un IEnumerable de las cadenas que "aplana" la matriz.) Usted puede hacer dos cosas:

  • Cambiar el string[,] a una matriz escalonada de matrices, string[][].

  • Implementar su propio método de extensión que itera a través de una matriz de dos dimensiones y la convierte en un IEnumerable<one-dimensional-array>.

Otros consejos

Usted debe ser capaz de realizar este trabajo con una matriz multidimensional, usando sólo Parallel.For en lugar de Parallel.ForEach:

string[,] board = new string[,] {
    {"A", "B", "C", "D", "E" },
    {"F", "G", "H", "I", "J"},
    {"K", "L", "M", "N", "O"},
    {"0", "1", "2", "3", "4"}
};

int height = board.GetLength(0);
int width = board.GetLength(1);

Parallel.For(0, height, y =>
    {
        for (int x = 0; x < width; ++x)
        {
            string value = board[y, x];
            // do whatever you need to do here
        }
    }
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top