Следующий код выдает InvalidCastException .
public static MachineProductCollection MachineProductsForMachine(
MachineProductCollection MachineProductList, int MachineID)
{
return (MachineProductCollection)
MachineProductList.FindAll(c => c.MachineID == MachineID);
}
Это меня удивляет, поскольку MachineProductCollection - это просто общий список MachineProducts, который именно то, что должен вернуть FindAll (). Вот полный исходный код MachineProductCollection. Вы заметите, что это просто оболочка для List.
[Serializable]
public partial class MachineProductCollection :
List<MachineProduct>
{
public MachineProductCollection() { }
}
Я прибег к следующему, который в основном перебирает результат FindAll (), который имеет тип List, и добавляет каждый элемент в мой MachineProductCollection. Очевидно, мне не нравится требуемая итерация.
public static MachineProductCollection
MachineProductForMachine(MachineProductCollection
MachineProductList, int MachineID)
{
MachineProductCollection result =
new MachineProductCollection();
foreach (MachineProduct machineProduct in
MachineProductList.FindAll(c => c.MachineID == MachineID))
{
result.Add(machineProduct);
}
return result;
}
Документация гласит, что InvalidCastException генерируется, когда происходит сбой во время явного преобразования ссылки. Ссылочные преобразования - это преобразования из одного ссылочного типа в другой. Хотя они могут изменить тип ссылки, они никогда не изменят тип или значение цели конверсии. Преобразование объектов из одного типа в другой является частой причиной этого исключения.
Учитывая, что List является основой MachineProductCollection, действительно ли это InvalidCastException?