C# 为什么这里会有例外?我是不是投得不好?
当我运行此命令时:C# 为什么这里会有例外?我是不是投得不好?,c#,file,serialization,io,C#,File,Serialization,Io,当我运行此命令时: public List<Animal> LoadFromFile() { // DECLARING ITEMS FOR FILE MANIPULATION fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); bf = new BinaryFormatter(); List<Animal> tempList =
public List<Animal> LoadFromFile()
{
// DECLARING ITEMS FOR FILE MANIPULATION
fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
bf = new BinaryFormatter();
List<Animal> tempList = new List<Animal>();
// DE-SERIALIZING
while (fs.Position < fs.Length)
{
Animal p = (Animal)bf.Deserialize(fs);
tempList.Add(p);
}
return tempList;
}
我得到一个System.InvalidCastException类型的异常,表示:
无法将类型为“System.Collections.Generic.List`1[AnimalShelterManager.Animal]”的对象强制转换为类型为“AnimalShelterManager.Animal”
这是什么意思?括号之间的内容实际上是我希望在反序列化时将其转换为的类型。包含列表和动物类的类以及从中继承的类都是[可序列化]。错误:
无法强制转换类型为的对象
'System.Collections.Generic.List`1[AnimalShelterManager.Animal]'到
键入“AnimalShelterManager.Animal”
这就说明了一切。您将动物列表强制转换为动物,您的反序列化将返回一个可能包含一个动物元素的项目列表。调试代码并确保这一点,并在强制转换之前使用FirstOrDefault获取第一个元素。能否将其更改为var p=Listbf.Deserializefs;,并注释掉templast.Addp;只是为了看看它的效果?