Dynamic update List<>

Like the title says. Is it possible to update a List<> dynamically?

I currently use a List<> for my player inventory, however when the player have used an item and I remove that item it removes every item before it in the list as well. I assume this is since the list can’t update the items before to new positions.

Second question: Should I use an array for this instead?

The thing is that I have a player inventory of 9 objects, and at the moment I never want it to get bigger, so I guess I could use an array. But I think list is better and easier since I would not then have to check how many items the player currently has all the time since I just go through how big the list currently is to check that. But then as I said I need to update it dynamically when the player uses an item.

So how do people usually do here?

// Code that adds item to inventory                    
if (this.GetComponent<pl_Inventory>().iCurrItemsInInv <= this.GetComponent<pl_Inventory>().iMaxItemsInInv)
                    {
                        this.GetComponent<pl_Inventory>().listOfItems.Add(rayHit.collider.gameObject.GetComponent<Item_Base>());
                        rayHit.collider.gameObject.transform.parent = gHand.transform;
                        rayHit.collider.gameObject.SetActive(false);
                    }
                    else
                    {
                        Debug.Log("Inventory is full");
                    }

// Code that removes the item

/// <summary>
/// Here we get all the puzzle gameobjects. There will be turned off when the player if finished, or even deleted.  

/// *This should be the prefab with all puzzle parts in it. Going to be deleted or turned off when done. 
/// </summary>
public GameObject clItemNeeded;

    
if (coll.tag == "Player")
        {
            gFinishedStairCase.gameObject.SetActive(true);
            gPlayer.GetComponent<pl_Inventory>().listOfItems.RemoveAt(clItemNeeded.GetComponent<Item_StairPlanks>().iItemID);
            Destroy(clItemNeeded);
        }

Okay, added this to the code, now it seems to work:

        if (coll.tag == "Player")
        {
            // Get the index for the item we want to remove
            int iRemovableItem;
            iRemovableItem = gPlayer.GetComponent<pl_Inventory>().listOfItems.IndexOf(clItemNeeded.GetComponent<Item_StairPlanks>());

            // Turn on puzzle piece
            gFinishedStairCase.gameObject.SetActive(true);

            // Set current item to -0 and bHoldingItem to false so player no longer has any item in his hands. 
            gPlayer.GetComponent<pl_Inventory>().bHoldingItem = false;
            gPlayer.GetComponent<pl_Inventory>().iChosenItem = -1;

            // Remove item from list and destory item so player no longer has it. 
            gPlayer.GetComponent<pl_Inventory>().listOfItems.RemoveAt(iRemovableItem);
            Destroy(clItemNeeded);
        }