【发布时间】:2021-02-02 03:34:30
【问题描述】:
我正在生成一些地图,但遇到了问题。下面是简化的代码。它返回 False 而它应该返回 True。
static Dictionary<int[], Tile> map = new Dictionary<int[], Tile>();
static bool GenerateMap()
{
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
Tile tile;
int[] i = {x, y};
if(map.ContainsKey(i))
{
tile = map[i];
Console.WriteLine("Contains!");
}
else
{
tile = new Tile();
tile.Generate();
map.Add(i, tile);
}
}
}
int[] z = {0,0};
if (map.ContainsKey(z)) return true;
return false;
}
我尝试过 Dictionary.TryGetValue() 和 Try / Catch,但都没有成功。
【问题讨论】:
-
数组是引用对象,这意味着除非它们覆盖
Equals,否则将使用默认的Object.Equals,它认为两个对象只有在它们实际上是同一个对象时才相等。包含数字 2 的两个数组不相等
标签: c# dictionary reference-type containskey