private void AddOrUpdateRefferance(int coordinate, IWiredCondition item) { if (itemToOldCoordinate.ContainsKey(item.GetOriginalWiredItem().Id)) { int oldLocation =(int) itemToOldCoordinate[item.GetOriginalWiredItem().Id]; List<IWiredCondition> list = (List<IWiredCondition>)roomMatrix[oldLocation]; IWiredCondition toRemove = null; foreach (IWiredCondition condition in list) { if (condition.GetOriginalWiredItem().Id == item.GetOriginalWiredItem().Id) { toRemove = condition; break; } } list.Remove(toRemove); itemToOldCoordinate.Remove(item.GetOriginalWiredItem().Id); } if (roomMatrix.ContainsKey(coordinate)) { List<IWiredCondition> items = (List<IWiredCondition>)roomMatrix[coordinate]; if (!items.Contains(item)) items.Add(item); } else { List<IWiredCondition> items = new List<IWiredCondition>(1); items.Add(item); roomMatrix.Add(coordinate, items); } itemToOldCoordinate.Add(item.GetOriginalWiredItem().Id, coordinate); }