错误:并非所有代码路径都返回值
本文关键字:代码 路径 返回值 错误 | 更新日期: 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");
}
正如错误消息所示,所有代码路径都必须返回一个值。有两个条件没有返回值:
- 如果文件不存在
- 如果引发异常
将代码更改为:
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;
}