我的應用程序使用字典爲什麼刪除(DictionaryInstance [key]);失敗?
protected _categoryToValueDict:Dictionary = new Dictionary();
一些映射到別的東西。
現在,在應用程序的某個時候,我需要從Dictionary
中刪除某個鍵。
我實現了這個簡單的方法:
public function setCategoryNoValue(cat:TAModelCategory):void {
// delete(_categoryToValueDict[ cat ]);
var old:Dictionary = _categoryToValueDict;
_categoryToValueDict = new Dictionary();
for (var key:* in old) {
if (key != cat) {
_categoryToValueDict[ key ] = old[ key ];
}
}
}
如果我只用[中delete操作的描述]
delete(_categoryToValueDict[ cat ]);
應用程序本身並不在正常模式下拋出錯誤。但只要我將其外部數據結構序列化爲外部數據源[當前爲SharedObject],應用程序就不能在稍後對其解除序列化。
如果我使用上述編碼手動迭代切除手術,則反序列化操作按預期工作和模型出現在應用程序。
替代方案應該是相同的。他們不應該嗎?
因此,我的問題:兩種選擇之間有什麼區別?
PS:此問題可能與my previous one有關。
UPDATE-1
的Adobe解釋了this page:
如果要使myObject的符合垃圾收集引用的對象,則必須刪除對它的所有引用。在這種情況下,必須更改myObject的值並從myMap中刪除myObject的關鍵,如在下面的代碼:
myObject = null;
delete myMap[myObject];
是假設這是一個錯字。它不應該看起來像這樣:
delete myMap[myObject];
myObject = null;
爲什麼傳遞一個空指針myMap作爲關鍵?
+1對於一個明確解釋的問題,並在發佈之前做一些研究。 – JeffryHouser
查看您的代碼; 「刪除」方法的來源在哪裏? – JeffryHouser
@ www.Flextras.com刪除是一個操作符,而不是一個方法。因此,我沒有提供一種方法。 – SteAp