ConvertAll
鉴于其他答案,为二维数组编写自己的方法真的很容易:
public static TOutput[,] ConvertAll<TInput, TOutput>(TInput[,] array, Func<TInput, TOutput> converter)
{
var result = new TOutput[array.GetLength(0), array.GetLength(1)];
for (int i = 0; i < array.GetLength(0); ++i)
for (int j = 0; j < array.GetLength(1); ++j)
result[i, j] = converter(array[i, j]);
return result;
}
仅仅因为 .NET 的作者不想包含这个方法,所以没有必要完全放弃。自己写很简单。
(如果您愿意,可以将其设为扩展方法。)
评论后编辑:如果你真的想处理下限(在某个维度上)不为零的数组,它是这样的:
public static TOutput[,] ConvertAll<TInput, TOutput>(TInput[,] array, Func<TInput, TOutput> converter)
{
int xMin = array.GetLowerBound(0);
int xLen = array.GetLength(0);
int yMin = array.GetLowerBound(1);
int yLen = array.GetLength(1);
var result = (TOutput[,])Array.CreateInstance(typeof(TOutput), new[] { xLen, yLen, }, new[] { xMin, yMin, });
for (int x = xMin; x < xMin + xLen; ++x)
for (int y = yMin; y < yMin + yLen; ++y)
result[x, y] = converter(array[x, y]);
return result;
}