Ну вот, к примеру:
private void DoWork()
{
Canvas CnMapField = new Canvas();
Image[] images = CopyFrom<Image>(CnMapField.Children);
foreach (Image img in images)
{
if (img.Margin.Left == x)
CnMapField.Children.Remove(img);
}
}
private T[] CopyFrom<T>(UIElementCollection collection) where T : UIElement
{
var images = new List<T>(collection.Count);
images.AddRange(collection.Cast<T>());
return images.ToArray();
}
То есть ты foreach(ем) бегаешь по копии коллекции, а удаляешь из оригинала.
Хотя в данном случае приведение к Image не обязательно.