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

时间:2014-04-21 17:55:38

标签: c#

为什么会这样?这是我从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
    {

    }
}

4 个答案:

答案 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)

如错误消息所示,所有代码路径都必须返回一个值。您有两个不返回任何值的条件:

  1. 如果文件不存在。
  2. 如果抛出异常。
  3. 将代码更改为:

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