微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当键为int []时,为什么Dictionary.ContainsKey返回False?

如何解决当键为int []时,为什么Dictionary.ContainsKey返回False?

我正在开发某些地图,但是遇到了一个问题。下面是简化的代码。它返回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,但都没有。

解决方法

更改此行:

static Dictionary<int[],Tile> map = new Dictionary<int[],Tile>();

将字典键设为KeyValuePairValueTuple而不是int[]

static Dictionary<KeyValuePair<int,int>,Tile> map = new Dictionary<KeyValuePair<int,Tile>();

static Dictionary<(int x,int y),Tile> map = new Dictionary<(int x,Tile>();

然后在整个代码中使用它。

KeyValuePairValueTuplevalue types。您可以按照通常的方式检查它们是否相等。 ContainsKey将按预期工作。

array是C#中的reference type。默认情况下,除非两个数组是同一对象,否则它们将永远彼此相等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。