use*_*322 4 c# arrays dictionary
我正在尝试使用整数,字符串和布尔数据类型的数组作为值创建一个Dictionary.我想,我应该使用object []作为值,所以声明看起来如此:
Dictionary<long, object[]> netObjectArray = new Dictionary<long, object[]>();
Run Code Online (Sandbox Code Playgroud)
每当我尝试将其元素的值设置为某个东西时,VS说字典中没有找到这样的键.
netObjectArray[key][2] = val; // ex: The given key was not present in the dictionary.
Run Code Online (Sandbox Code Playgroud)
我该如何正确使用它?
UPD1: 不知何故,在抛出此异常之前,另一个字典以类似的方式使用而没有问题:
Dictionary<long, Vector2> netPositions = new Dictionary<long, Vector2>();
netPositions[key] = new Vector2(x, y); // works ok
Run Code Online (Sandbox Code Playgroud)
在此本地显示之后,已分配值,字典现在包含该条目.为什么我的另一本字典不是这样的?
解决方案:在将值写入值数组之前,我们必须首先初始化该数组.这段代码适合我:
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 :)
Run Code Online (Sandbox Code Playgroud)
这是预期的:如果密钥不存在,则Dictionary<K,V>尝试读取该密钥失败.您应该key在访问之前为元素分配一个空数组.
以下是当您不知道密钥是否存在时访问字典的典型模式:
object[] data;
if (!netObjectArray.TryGetValue(key, out data)) {
data = new object[MyObjCount];
netObjectArray.Add(key, data);
}
data[2] = val;
Run Code Online (Sandbox Code Playgroud)
编辑(响应问题的编辑)
只有在尝试使用以前未知的密钥读取字典时才会看到异常.像你这样的作业
netPositions[key] = new Vector2(x, y);
Run Code Online (Sandbox Code Playgroud)
允许,即使在分配时键不在字典中:这会对您的字典执行"插入或更新"操作.
| 归档时间: |
|
| 查看次数: |
3011 次 |
| 最近记录: |