编程语言
首页 > 编程语言> > C#Dictionary – 字典中没有给定的键

C#Dictionary – 字典中没有给定的键

作者:互联网

我目前正在尝试将Tiled(Tiled地图编辑器)地图文件中的游戏对象加载到我在C#中制作的游戏引擎中.我正在使用TiledSharp(链接到github here).它使用字典来保存我正在尝试加载的每个单独的图块(或“游戏对象”)的属性.但由于某些原因,当我遍历属性时出现错误,如果我检查它是否为空,我也会收到错误

这是我正在使用的代码片段:

for (int l = 0; l < tmxMap.Tilesets[k].Tiles.Count; l++)
    // This line throws an error
    if (tmxMap.Tilesets[k].Tiles[l].Properties != null)
        // and if I remove the above line, this line throws an error
        for (int m = 0; m < tmxMap.Tilesets[k].Tiles[l].Properties.Count; m++)

我得到的错误说字典中没有给定的密钥.但是……我甚至没有检查钥匙.

我错过了什么吗?

任何帮助,将不胜感激.

解决方法:

The error I get says The given key was not present in the dictionary. But… I’m not even checking for a key.

是的,你正在检查钥匙.这是你的代码:

if (tmxMap.Tilesets[k].Tiles[l].Properties != null)

您正在使用密钥k检查Tilesets,然后使用密钥l检查Tiles.如果Tilesets不包含带有键k的项,则会出现该错误.具有键l的Tiles也是如此.

使用词典时,您可以执行以下操作:

选项1

查找执行两次:一次查看项目是否存在,然后第二次获取值:

var items = new Dictionary<string, string>();
items.Add("OneKey", "OneValue");
if(items.ContainsKey("OneKey"))
{
    var val = items["OneKey"];
}

选项2

这是另一种执行查找的方法:

string tryVal;
if (items.TryGetValue("OneKey", out tryVal))
{
    // item with key exists so you can use the tryVal
}

标签:c,dictionary,game-engine,tiled
来源: https://codeday.me/bug/20190622/1265471.html