finding and destroying specific children

I've tried :

var Shadows = GetComponentsInChildren(Projector);
for (s in Shadows)  Destroy(s.gameObject);

but it seems to destroy more than just the child, and the whole game seems to go nuts.

then I've tried :

var Shadows = GetComponentsInChildren(Projector);
for (s in Shadows)  Destroy(s);

which works, but ofcourse it only destroys the component, which leaves me with some transform-objects (which is memory leak)

then I tried:

for (var child:Transform in transform) 
{
    if (child.name == "shadowcast")
    {
        Destroy(child);//.gameObject);
    }
}

but that makes it crash as soon as it finds something with that name (infinite loop it seems)

what am I doing wrong ?

EDIT: now I've tried this:

var todelete : Array = new Array();
for (var child:Transform in transform) 
{
    if (child.name == "shadowcast")
    {
        print("destroyed shadow: "+child);
        //Destroy(child);
        todelete.Push(child.gameObject);
    }
}

    for (var s in todelete) Destroy(s);

This in case destroying the child causes the for loop to be corrupted.

and now I get "MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it." which refers to other children of the parent of these projectors. So it clearly deleted too much and lots of problems along with it. (on a side note: what I'm deleting is something (a projector) I don't acces at all in any of my scripts)

The first one finds projectors that are on the current gameobject, not just the children. You could do if (s.gameObject != gameObject) Destroy(s.gameObject);

The last one isn't destroying immediately, you'd need to use DestroyImmediate instead of Destroy for that to work