Вы можете использовать Cast<T>
для приведения к интерфейсу, а затем Concat
для потоковой передачи одной последовательности за другой.
return _boys.Cast<IChild>().Concat(_girls.Cast<IChild>()); // .NET 3.5 and greater
Примечание. Если вы используете .NET 3.5, вам необходимо выполнитьактерский состав, как показано здесь.Если вы используете .NET 4, вы можете следовать ответу Кристиана Фенна и опускать приведение вместо .Concat<IChild>
, что работает, потому что они сделали IEnumerable<T>
ковариантным в выпуске .NET 4, что позволяет1010 * для замены, когда методы вызывают для IEnumerable<IChild>
.
return _boys.Concat<IChild>(_girls); // .NET 4.0 and greater
Для завершения, если вы все еще используете .NET 2.0, ни один из подходов не применим, хотя реализовать его самостоятельно - тривиально.
public virtual IEnumerable<IChild> Children // .NET 2.0 and greater
{
get
{
foreach (IChild boy in _boys)
yield return boy;
foreach (IChild girl in _girls)
yield return girl;
}
}