C#:KeyNotFoundException:字典中不存在给定的键

问题描述

foreach (KeyValuePair<String,EngineProperty> kvp in propertyDict)
{
    Debug.Log(kvp.Key.GetType()+" : "+ kvp.Key+ " "+ mainText.text.GetType()+ " "+ mainText.text);
}
slider.value = propertyDict[mainText.text].GetSpeed();

从foreach循环中打印出5个项目。下面的代码就是其中之一

System.String :   Piston   System.String   Piston

Piston是我要寻找的关键

但是在for循环的正下方,

当我使用这个

slider.value = propertyDict[mainText.text].GetSpeed();

我收到此错误

KeyNotFoundException: The given key was not present in the dictionary.

但是密钥被打印在for循环中。我不明白。
这就是我初始化的方式

public Dictionary<String,EngineProperty> propertyDict = new Dictionary<String,EngineProperty>();

我尝试用Stringstring替换所有内容,但仍然行不通。

我该怎么办?

解决方法

正如乔恩·斯基特(Jon Skeet)在评论中说的那样,这个问题似乎是多余的空间。如果查看字符串System.String : Piston的第一部分,冒号和活塞之间有3个空格,但是您只在分隔符中放了一个空格。这意味着活塞的开头有2个空格。同样,活塞后面有3,因此表示实际字符串为 Piston 。对于mainText,根据您发布的字符串,您在活塞之前有类似的3个空格,但在之后没有类似的空格。这会使mainText成为 Piston,这不匹配。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...