KeyNotFoundException: The given key was not present in the dictionary C#
本问题已经有最佳答案,请猛点这里访问。
对于这个问题,我很抱歉,因为我错过了一些难以置信的基本知识。
我得到
The given key was not present in the dictionary from Unity for a
search for a Dictionary Key.
下面添加了示例代码。
当我按GUI上的GET DATA按钮时,它工作正常。但是当我按下GUI上的GET DATA CAST按钮时,它给出了
我缺少什么?我需要在代码中进行的任何建议的更改
我将数据插入了Dict,抱歉,我错过了将其发布到此处
类
1 2 3 4 5 6 7 8 9 10 11 | [System.Serializable] public sealed class AnimName { public static readonly AnimName IDLE = new AnimName("IDLE"); public AnimName(string value) { Value = value; } public string Value { get; private set; } } |
词典和代码:
1 |
//这一次被称为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Start(){ KeyValueData.Add(AnimName.IDLE, new AnimData(new Vector3(-0.09f, -0.02f, -0.25f), new Vector3(-41.866f, 386.781f, -524.68f), new Vector3(-0.028f, 0.027f, 0.13f), new Vector3(18.724f, 19.477f, -32.435f), 0.3f)); } void OnGUI() { if (GUI.Button(new Rect(10, 10, 150, 100),"GET DATA")) { Debug.Log(KeyValueData [AnimName.IDLE]); } if (GUI.Button(new Rect(200, 10, 150, 100),"GET DATA CAST")) { AnimName a = new AnimName("IDLE"); Debug.Log(KeyValueData [a]); } } |
您必须实现一个自定义的EqualityComparer,用于比较名称。将其传递给字典的构造函数将解决问题。否则,词典将使用您参考中不相等的参考进行比较。
1 2 3 4 5 6 7 8 9 10 11 12 | class AnimNameEqualityComparer: EqualityComparer<AnimName> { public override bool Equals(AnimName a1, AnimName a2) { return a1.Value.Equals(a2.Value) } public override int GetHashCode(AnimName a) { return a.Value.GetHashCode(); } } |
在创建字典时使用比较器:
1 |
第二个
如果您希望能够创建像这样的新
或者只是坚持使用静态只读变量来覆盖所需的所有可能性。当然,这确实取决于您在编译时知道所有可能的值。