No código da Aula, o Comando para remove um item da lista ficou:
public void Remover(T item)
{
int indiceItem = -1;
for (int i = 0; i < _proximaPosicao; i++)
{
T itemAtual = _itens[i];
if (itemAtual.Equals(item))
{
indiceItem = i;
break;
}
}
// Quero remover o 0x01
// [0x03] [0x04] [0x05] [null]
// ^
// ` _proximaPosicao
for (int i = indiceItem; i < _proximaPosicao - 1; i++)
{
_itens[i] = _itens[i + 1];
}
_proximaPosicao--;
//_itens[_proximaPosicao] = null;
}
Porem, ela cai em um problema de lógica quando não encontra o item equivalente, quando tenta rodar o segundo "for" iniciando pelo indice "-1" eu sugiro uma abordagem assim:
public void Remover(T item)
{
for (int i = 0; i < _proximaPosicao; i++)
{
T contaIndice = _itens[i];
if (contaIndice.Equals(item))
{
for (int i2 = i; i2 < _proximaPosicao - 1; i2++)
{
_itens[i2] = _itens[i2 + 1];
}
_proximaPosicao--;
//_itens[_proximaPosicao] = null;
break;
}
}
}
Aonde eu só removo o item caso encontre, ou então um "throw new Exception" especificando o erro