public void EquipPC(PlayerCharacter pc, Item item, string slotName) { EquipmentSlot slot; if (item != null) { var validSlots = GetValidSlots(item); slot = validSlots.FirstOrDefault( x => x.Name.Equals(slotName, StringComparison.OrdinalIgnoreCase)) ?? throw new InvalidOperationException($"Item {item.Name} is of type {item.ItemType} and cannot be equipped in slot {slotName}"); Inventory.Remove(item); } else { slot = EquipmentSlots.FirstOrDefault(x => x.Name.Equals(slotName, StringComparison.OrdinalIgnoreCase)) ?? throw new ArgumentException($"Slot {slotName} does not exist."); } var existing = pc.Equipment[slot.Name]; pc.Equipment[slot.Name] = item; if (existing != null) { Inventory.Add(existing); } }