我正在试图创建一个带整数,字符串和布尔型数据类型数组的字典作为值。我想,我应该使用对象[]作为值,所以声明看起来如此:不同数据类型的数组作为值的字典
Dictionary<long, object[]> netObjectArray = new Dictionary<long, object[]>();
每当我尝试设置其元素的东西价值,VS说,有一个在字典中没有发现这样的关键。
netObjectArray[key][2] = val; // ex: The given key was not present in the dictionary.
我该如何正确使用它?
UPD1: 不知何故,对引发此异常之前,其他的字典没有问题使用类似的方式:
Dictionary<long, Vector2> netPositions = new Dictionary<long, Vector2>();
netPositions[key] = new Vector2(x, y); // works ok
在此之后的当地人表现出的价值分配和字典现在包含该条目。为什么我的其他字典不是这样?
解决方案:在将值写入值数组之前,我们必须首先初始化该数组。此代码的工作对我来说:
try { netObjectArray[key] = netObjectArray[key]; } // if the object is undefined,
catch { netObjectArray[key] = new object[123]; } // this part will create an object
netObjectArray[key][0] = new Vector2(x, y) as object; // and now we can assign a value to it :)
有你'初始化netObjectArray [关键]'至少'新的对象[2]'? – 2012-04-10 20:19:39
此外,在Dictionary中存储这样的不同类型是一种糟糕的代码异味。你真的需要吗,还是可以用更好的格式封装数据? – 2012-04-10 20:22:30
您可以使用'Tuple'作为值。 http://msdn.microsoft.com/en-us/library/system.tuple.aspx –
2012-04-10 20:25:13