Список приведения - проблема ковариации / контравариантности

Учитывая следующие типы:

public interface IMyClass { }
public class MyClass : IMyClass { }

Интересно, как я могу преобразовать List в List ? Я не совсем понимаю темы ковариации / контравариантности, но понимаю, что из-за этого я не могу просто привести List.

Я мог придумать только это тривиальное решение; лишенный элегантности, трата ресурсов:

...
public List<IMyClass> ConvertItems(List<MyClass> input)
{
   var result = new List<IMyClass>(input.Count);
   foreach (var item in input)
   {
       result.Add(item);
   }
   return result;
}
....

Как вы можете решить эту проблему более элегантным / производительным способом?

( Имейте в виду, что мне нужно решение .NET 2.0, но для полноты я был бы рад см. также более элегантные решения с использованием более новых версий фреймворка. )

14
задан abatishchev 8 February 2011 в 10:20
поделиться