当键是 int[] 时,为什么 Dictionary.ContainsKey 返回 False?
Why is Dictionary.ContainsKey returning False when the key is an int[]?
我正在处理一些地图生成,但我遇到了 运行 问题。下面是简化的代码。它 return 是错误的,而它应该 return 是正确的。
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,但都没有用。
更改此行:
static Dictionary<int[], Tile> map = new Dictionary<int[], Tile>();
将字典键设为 KeyValuePair or a ValueTuple 而不是 int[]
:
static Dictionary<KeyValuePair<int, int>, Tile> map = new Dictionary<KeyValuePair<int, int>, Tile>();
或
static Dictionary<(int x, int y), Tile> map = new Dictionary<(int x, int y), Tile>();
然后在整个代码中使用它。
KeyValuePairs and ValueTuples are value types。您可以用通常的方式检查它们是否相等。 ContainsKey
将按预期工作。
C# 中的 array is a reference type。默认情况下,没有 2 个数组会彼此相等,除非它们是同一个对象。
我正在处理一些地图生成,但我遇到了 运行 问题。下面是简化的代码。它 return 是错误的,而它应该 return 是正确的。
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,但都没有用。
更改此行:
static Dictionary<int[], Tile> map = new Dictionary<int[], Tile>();
将字典键设为 KeyValuePair or a ValueTuple 而不是 int[]
:
static Dictionary<KeyValuePair<int, int>, Tile> map = new Dictionary<KeyValuePair<int, int>, Tile>();
或
static Dictionary<(int x, int y), Tile> map = new Dictionary<(int x, int y), Tile>();
然后在整个代码中使用它。
KeyValuePairs and ValueTuples are value types。您可以用通常的方式检查它们是否相等。 ContainsKey
将按预期工作。
C# 中的 array is a reference type。默认情况下,没有 2 个数组会彼此相等,除非它们是同一个对象。