Problem with Foreach.

Problem Solved. it was a case of forgetting to return a new instance everytime i create a spell.

I suspect that the instances of BasicSpell class that you create here

spells.Add (new BasicSpell());

and the instances that MageSpells collection contains here

foreach (var item in GameManager._BasicSpells.MageSpells) {

are different instances, created in different places of your program. They may look the same, contain the same data, but they are separate objects in memory. So, when you compare them here

if (spells[i] != TypeOfSpellToAdd) {

you always get true, because the objects are always different.