C#坐标键控字典

Ent*_*ity 1 c# multidimensional-array coordinate

我有一个班级Room和一个班级World.目前,我有一个

    Dictionary<Point, Room> world;
Run Code Online (Sandbox Code Playgroud)

我存储Room的是这样的:

    world.Add(new Point(0,0), new Room());
Run Code Online (Sandbox Code Playgroud)

但是当我尝试访问它时,它返回null:

    world.Get(new Point(0,0));
Run Code Online (Sandbox Code Playgroud)

我理解为什么会这样.但我的问题是:有人知道更好的方法吗?

Ree*_*sey 8

这应该可以正常工作,您的Point实现工具GetHashCodeEquals正确.

例如,以下工作完美:

using System;
using System.Collections.Generic;
using System.Drawing;

class Room
{
    public int X
    {
        get;
        set;
    }
}

struct Program
{
    static void Main()
    {
        Dictionary<Point, Room> world = new Dictionary<Point, Room>();

        world.Add(new Point(0, 0), new Room() { X = 0 });
        world.Add(new Point(2, 3), new Room() { X = 2 });

        Room room = world[new Point(2, 3)];

        Console.WriteLine(room.X);
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是使用System.Drawing.Point,它GetHashCode正确实现.(按预期打印"2".)

我怀疑问题是你的实施Point.确保它实现EqualsGetHashCode正确,或(更好的)使用一个版本点的框架结构.

  • @TheAdamGaskins:问题是如果你想将它用作字典中的Key,那么类/结构必须正确实现Equals + GetHashCode ... (2认同)