Другой элегантный способ - создать класс-оболочку, подобный этому (я включаю это в свой проект утилит).
public class EnumerableGenericizer<T> : IEnumerable<T>
{
public IEnumerable Target { get; set; }
public EnumerableGenericizer(IEnumerable target)
{
Target = target;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator()
{
foreach(T item in Target)
{
yield return item;
}
}
}
Теперь вы можете сделать это:
IEnumerable<MyClass> genericized =
new EnumerableGenericizer<MyClass>(nonGenericCollection);
Затем можно обернуть обычный обобщенный список вокруг обобщенной коллекции.