public void RemoveUnobtainedFamiliars(GameSave saveFile, object inventory) { var reflected = inventory.AsDynamic(); var familiars = ((IEnumerable <InventoryItem>)reflected._items).Cast <InventoryFamiliar>(); var familiarsToRemove = familiars .Where(f => !saveFile.HasFamiliar(f.FamiliarType)) .Select(f => f.Name) .ToList(); var entries = (IList)reflected.Entries; var entryMapping = (IList <int>)reflected.KeyToItemLookup; for (var i = entries.Count - 1; i >= 0; i--) { var entry = entries[i]; if (familiarsToRemove.Contains(entry.AsDynamic().Text)) { entries.RemoveAt(i); entryMapping.RemoveAt(i); } } }