Question

Je vais avoir un peu de mal à trouver comment appeler la Parallel.ForEach avec un tableau 2D de chaînes de caractères:

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 je ne spécifie pas le type explicitement j'obtiens l'erreur suivante:

Le type des arguments de la méthode 'Système.Le filetage.Les tâches.En parallèle.ForEach(Système D'.Les Collections.Génériques.IEnumerable, Système.Action)' ne peut pas être inférée à partir de l'utilisation.Essayez spécifier les arguments de type explicitement.

Quelle est la bonne manière de spécifier le type des arguments de façon explicite?

Était-ce utile?

La solution

Le problème pour vous est que le 2-dimensions des tableaux de ne pas mettre en œuvre IEnumerable<one-dimensional-array>.(Il n'mettre en œuvre IEnumerable, mais c'est une IEnumerable de chaînes qui "aplatit" le tableau.) Vous pouvez faire deux choses:

  • Modifier la string[,] pour un tableau en escalier de tableaux, string[][].

  • Mettre en place votre propre méthode d'extension qui effectue une itération sur un tableau à deux dimensions et il se transforme en un IEnumerable<one-dimensional-array>.

Autres conseils

Vous devriez toujours être en mesure de faire ce travail avec un tableau multidimensionnel, en utilisant seulement Parallel.For au lieu 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
        }
    }
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top