在其他答案的基础上,编写一个自己的ConvertAll
方法处理2D数组非常容易:
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;
}
string[,]
还是string[]
?你的问题不一致。 - Jon SkeetIList<IList<>>
。 - JodrellObject[,]
实际上包含字符串,为什么一开始不是string[,]
呢? - Alex