【发布时间】:2011-11-18 06:47:36
【问题描述】:
这是一个扩展方法each,可用于将Action<int, int, T> 应用于每个元素及其对应的二维数组索引:
static public void each<T>(this T[,] a, Action<int, int, T> proc)
{
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 0; j < a.GetLength(1); j++)
proc(i, j, a[i, j]);
}
示例用法:
var arr = new int[3, 3];
arr.each((x, y, val) => arr[x, y] = x + y);
arr.each((x, y, val) => Console.WriteLine("{0} {1} {2}", x, y, val));
是否有可能编写一个可以处理任何等级数组的each 版本?
【问题讨论】:
-
Func和Action采用的方法是提供大量重载。如果您在这里超出某个级别,我会争辩说这个问题太复杂了,以至于过载没有用。在某一点上,我认为该软件必须动态地适应数组中的维数才能使其易于理解。此外,您应该将您的方法命名为Each。 Initial-caps ("PascalCase") 是 .Net 中方法的命名约定。