如何使用多维数组调用Parallel.ForEach

Kir*_*ril 3 c# concurrency multithreading parallel-extensions

我在弄清楚如何Parallel.ForEach使用2D数组字符串调用时遇到了一些麻烦:

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
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果我没有明确指定类型,我会收到以下错误:

无法从用法中推断出方法'System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable,System.Action)'的类型参数.尝试显式指定类型参数.

明确指定类型参数的正确方法是什么?

mqp*_*mqp 6

你遇到的问题是二维数组没有实现IEnumerable<one-dimensional-array>.(它确实实现了IEnumerable,但它是一个IEnumerable"扁平化"数组的字符串.)你可以做两件事:

  • 将其更改string[,]为锯齿状的数组数组string[][].

  • 实现自己的扩展方法,迭代二维数组并将其转换为IEnumerable<one-dimensional-array>.