Попробуйте это ...
class Program
{
static void Main(string[] args)
{
var array = new string[] { "video", "photo", "hurf", "photo" };
var ml = new MediaList(array);
foreach(var element in ml)
Console.WriteLine(element.GetType().Name);
Console.Read();
}
}
public class Media { }
public class Video : Media { }
public class Photo : Media { }
public class MediaList
{
private string[] elements;
public MediaList(string[] elements) { this.elements = elements; }
public IEnumerator<Media> GetEnumerator()
{
foreach (string s in elements)
switch (s)
{
case "video":
yield return new Video();
break;
case "photo":
yield return new Photo();
break;
}
}
}
Вы можете добавить это в консольное приложение, чтобы протестировать его.
Обратите внимание на пару разных вещей. Сначала , вы никогда не дадите return null. Это не имеет никакого отношения к вашей проблеме, но никто не ожидает, что перечислимое число возвратит ноль и вызовет у вас проблемы позже. Второй , я не кастую то, что возвращаю. Все приведенные значения неявно или обрабатываются компилятором, поэтому мне не нужно этого делать. Третий , это компилирует и работает, как и ваш исходный код. Ваша проблема возникает где-то еще, как вы обнаружите, если перетащите этот код в консольное приложение и протестируете его.