以下代码将引发InvalidCastException。C#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()的结果是类型列表,并将每个项目我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吗?
很好的答案 - 简短而甜美。特别是现在使用对象/字符串类比来说,它是完全有意义的。谢谢。 – 2009-07-13 04:03:58