多维数组的自定义迭代?

Myt*_*ics 1 c# iteration customization multidimensional-array

就像是:

forelement (element G_Element, Grid)
{
    Grid[G_Element.dim1, G_Element.dim2] = 
        new clsGridElement(G_Element.dim1, G_Element.dim2);
}
Run Code Online (Sandbox Code Playgroud)

代替

for (int X = 0; X < GridWidth; X++) 
    for (int Y = 0; Y < GridHeight; Y++) 
        Grid[X, Y] = new clsGridElement(X, Y);
Run Code Online (Sandbox Code Playgroud)

如果某些东西不是天生存在的,那么可以创造出什么?

蒂姆,谢谢

Ree*_*sey 6

你可以这样做 - 只需创建一个暴露这些的自定义类型,并使用常规foreach:

public class TwoDimensionalIterator
{
    public TwoDimensionalIterator(int i, int j)
    {
       this.Dim1 = i; this.Dim2 = j;
    }
    public int Dim1 { get; private set; }
    public int Dim2 { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在某处创建一个扩展方法来返回一个可枚举的:

public static IEnumerable<TwoDimensionalIterator> IterateTwoDim<T>(this T[,] array)
{
     for (int i=0;i<array.GetLength(0);++i)
         for (int j=0;i<array.GetLength(1);++j)
            yield return new TwoDimensionalIterator(i,j);
}
Run Code Online (Sandbox Code Playgroud)

有了这个,你就可以这样做:

foreach(var index in Grid.IterateTwoDim())
{
    Grid[index.Dim1, index.Dim2] = new clsGridElement(index.Dim1, index.Dim2);
}
Run Code Online (Sandbox Code Playgroud)