Casting populated List <BaseClass> в список <ChildClass>
У меня есть List<BaseClass>
с членами в нем. Я хотел бы передать список (и все его члены) в тип List<ChildClass>
, где ChildClass
наследует BaseClass
. Я знаю, что могу получить тот же результат через foreach:
List<ChildClass> ChildClassList = new List<ChildClass>();
foreach( var item in BaseClassList )
{
ChildClassList.Add( item as ChildClass );
}
Но есть ли более простой способ сделать это? Примечание - это делается на платформе WP7.
Ответы
Ответ 1
Вы можете сделать это, если действительно уверены, что все элементы являются доступными:
ChildClassList = BaseClassList.Cast<ChildClass>().ToList();
Ваш текущий код добавляет null
, если элемент BaseClass не может быть добавлен в ChildClass. Если это действительно было вашим намерением, это было бы эквивалентно:
ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList();
Но я бы предпочел это, включая проверку типов, и пропустил элементы, которые не совпадают:
ChildClassList = BaseClassList.OfType<ChildClass>().ToList();
Ответ 2
Следующее почти эквивалентно вашему текущему коду (единственная недостающая вещь заключается в том, что он не добавляет нули для неудачных попыток):
var childList = baseList.OfType<ChildClass>().ToList();
Это игнорирует экземпляры, в которых список содержит другой производный класс, отличный от ChildClass
.
Вы также можете использовать:
var childList = baseList.Cast<ChildClass>().ToList();
Но это вызовет InvalidCastException
для вещей, которые он не может отличить.