Trim Excess on List(C#)

I was wondering how this worked, for instance, if I have a list with 10 items in it, I remove 2 items, I trim excess.

Does it end up as [0]-[7] now, or did they keep their old values and the old ones are just removed?

The indexes of the items in the list will be 0 - 7. The values of the contents in the list will keep what you haven’t removed.
For example, say you have a List with the numbers 1 - 10 and you remove the numbers 5 and 7, the result is:

List[0] = 1;
List[1] = 2;
List[2] = 3;
List[3] = 4;
List[4] = 6;
List[5] = 8;
List[6] = 9;
List[7] = 10;

When you ‘remove an object’ from a list in reality a reference to an object is cleared, but the length of the list is not changed. In fact, lists are initialized to a default capacity depending on how you initialize them. If you initialize it with no objects that capacity will be zero, but if you initialize it with one object then the capacity is initialized to 4. This is done so that the list doesn’t have to be resized every time you add or remove a value. You can set the capacity manually by passing an integer in the parenthesis.

// initializes a list with a capacity of 10.
List<object> objects = new List<object>(10);

Otherwise the capacity of a List is completely dynamic and, being undocumented in the c# spec, is subject to be whatever the good people over at Microsoft decide it should be.