我在弄清楚如何使用2D数组字符串调用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"}};
Parallel.ForEach(board, row =>
{
for (int i = 0; i < row.Length; ++i)
{
// find all valid sequences
}
});
如果我没有明确指定类型,我会收到以下错误:
方法的类型参数 “System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable, System.Action)'不可能 从用法推断。尝试 指定类型参数 明确。
明确指定类型参数的正确方法是什么?
答案 0 :(得分:6)
问题在于二维数组不实现IEnumerable<one-dimensional-array>
。 (它确实实现了IEnumerable
,但它是IEnumerable
字符串“扁平化”数组。)你可以做两件事:
将string[,]
更改为锯齿状阵列数组string[][]
。
实现您自己的扩展方法,该方法迭代二维数组并将其转换为IEnumerable<one-dimensional-array>
。
答案 1 :(得分:3)
你仍然可以使用多维数组来完成这项工作,只需使用Parallel.For
代替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
}
}
);