以下代碼將引發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