定义二维动态数组

Har*_*hna 5 .net c# arrays

如何定义二维动态数组?如果我想使用List <>,我可以将它用于两个维度吗?

Mar*_*ann 11

我所知道的没有二维数组的内置动态等价物,但你可以轻松地获得或多或少相同的功能.

使用此API定义Coordinate类:

public class Coordinate : IEquatable<Coordinate>
{
     public Coordinate(int x, int y);
     public int X { get; }
     public int Y { get; }
     // override Equals and GetHashcode...
}
Run Code Online (Sandbox Code Playgroud)

您现在可以创建这些Coordinate实例的集合.

如果您创建了一个HashSet<Coordinate>,则可以保证如果已经添加了坐标,则无法添加坐标,因为它会覆盖等于.

如果需要,可以将Coordinate扩展为Coordinate<T>:

public class Coordinate<T> //...
{
    // previous stuff...

    public T Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您将强类型项与每个坐标相关联,如下所示:

var items = new HashSet<Coordinate<string>>();
items.Add(new Coordinate<string>(1, 4) { Item = "Foo" });
items.Add(new Coordinate<string>(7, 19) { Item = "Foo" });
// ...
Run Code Online (Sandbox Code Playgroud)