Если вам нужно, чтобы приведенный список работал как исходная ссылка (установка элемента по индексу также устанавливает элемент в исходной коллекции, вы можете создать класс-оболочку, реализующий IList . что-то), для решения общего назначения вам понадобятся два из-за общих ограничений:
public class UpCastList<FromType, ToType> : IList<ToType>
where FromType : ToType
public class DownCastList<FromType, ToType : IList<ToType>
where ToType : FromType
Другая возможность делегирования преобразования:
public class CastList<FromType, ToType> : IList<ToType>
{
public CastList(IList<FromType> source, Func<FromType, ToType> converter) { ... }
}
Редактировать: если вам нужен только IEnumerable , тогда вы можете использовать метод расширения Cast , как упоминалось ранее.