错误:并非所有代码路径都返回值

本文关键字:代码 路径 返回值 错误 | 更新日期: 2023-09-27 17:59:17

为什么会发生这种情况?这是我从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
    {
    }
}

错误:并非所有代码路径都返回值

假设您的方法返回一个类型为object的对象,但您只在try块内部返回,这也是从if语句内部返回的。因此,如果您的条件失败,您的方法将不会返回任何内容。此外,如果try块中存在异常,则在返回对象之前,您的方法将无法返回任何内容。这就是为什么你会出错。您可以通过从try / catch块外部返回null来修复此问题。

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;
}

虽然这将修复您的错误,但您应该寻找其他选项,如在找不到文件时抛出异常,或返回错误对象。

如果代码引发异常或不满足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");
}

正如错误消息所示,所有代码路径都必须返回一个值。有两个条件没有返回值:

  1. 如果文件不存在
  2. 如果引发异常

将代码更改为:

try
{
    if (File.Exists("D://my.bin"))
    {
       ...
       return deserializedObject;
    }
}
catch
{
}
return null; // Or return an empty dictionary with:
             // return new Dictionary<int, Question>();

你可以试试这个

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;
 }