为什么会这样?这是我从bin文件中读取字典的代码
public static object LoadObject()
{
try
{
if (File.Exists("D://my.bin"))
{
FileStream stream = File.OpenRead("D://my.bin");
BinaryFormatter formatter = new BinaryFormatter();
Dictionary<int, Question> deserializedObject = (Dictionary<int, Question>)formatter.Deserialize(stream);
stream.Close();
return deserializedObject;
}
}
catch
{
}
}
答案 0 :(得分:4)
您的方法假设返回object
类型的对象,但您只是在try
块内返回,而且也在if
语句内返回。因此,如果您的条件失败,您的方法将不会返回任何内容。此外,如果try块中存在异常,则在返回对象之前,您的方法将无法返回任何内容。这就是你得到错误的原因。您可以通过从null
块之外返回try / catch
来解决此问题。
public static object LoadObject()
{
try
{
if (File.Exists("D://my.bin"))
{
FileStream stream = File.OpenRead("D://my.bin");
BinaryFormatter formatter = new BinaryFormatter();
Dictionary<int, Question> deserializedObject = (Dictionary<int, Question>)formatter.Deserialize(stream);
stream.Close();
return deserializedObject;
}
}
catch(Exception ex)
{
//log exception
return null;
}
return null;
}
虽然这将修复您的错误,但您应该寻找其他选项,例如在找不到文件时抛出异常,或者返回错误对象。
答案 1 :(得分:2)
如果您的代码引发异常或者不满足条件File.Exists,则还需要返回 然而,按原样,抓住例外是没有意义的。如果你不对它做任何事情,那就让它在上层冒泡
public static object LoadObject()
{
if (File.Exists("D://my.bin"))
{
FileStream stream = File.OpenRead("D://my.bin");
BinaryFormatter formatter = new BinaryFormatter();
Dictionary<int, Question> deserializedObject = (Dictionary<int, Question>)formatter.Deserialize(stream);
stream.Close();
return deserializedObject;
}
else
throw FileNotFoundException("There is no file named", "D:\\my.bin");
}
答案 2 :(得分:0)
你可以试试这个
public static object LoadObject()
{
try
{
if (File.Exists("D://my.bin"))
{
FileStream stream = File.OpenRead("D://my.bin");
BinaryFormatter formatter = new BinaryFormatter();
Dictionary<int, Question> deserializedObject = (Dictionary<int, Question>)formatter.Deserialize(stream);
stream.Close();
return deserializedObject;
}
}
catch
{
return null;
}
return null;
}
答案 3 :(得分:0)
如错误消息所示,所有代码路径都必须返回一个值。您有两个不返回任何值的条件:
将代码更改为:
try
{
if (File.Exists("D://my.bin"))
{
...
return deserializedObject;
}
}
catch
{
}
return null; // Or return an empty dictionary with:
// return new Dictionary<int, Question>();