C# 错误:并非所有代码路径都返回值
为什么会这样?这是我从bin文件读取字典的代码C# 错误:并非所有代码路径都返回值,c#,C#,为什么会这样?这是我从bin文件读取字典的代码 public static object LoadObject() { try { if (File.Exists("D://my.bin")) { FileStream stream = File.OpenRead("D://my.bin"); BinaryFormatter formatter = new BinaryFormatter();
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
{
}
}
如果代码引发异常或不满足条件文件.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");
}
假设您的方法返回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
{
return null;
}
return null;
}
正如错误消息所示,所有代码路径都必须返回一个值。有两种情况下不返回值: 如果文件不存在。 如果抛出异常。 将代码更改为:
try
{
if (File.Exists("D://my.bin"))
{
...
return deserializedObject;
}
}
catch
{
}
return null; // Or return an empty dictionary with:
// return new Dictionary<int, Question>();
如果发生异常,您的方法将不返回任何内容。它必须始终返回一个对象。空的catch块的用途是什么?你希望它能做什么?错误仍然是sameI不会因为缺少更好的选项而盲目地返回null。当我想返回null时,我会返回null。如果我没有更好的选择,我会在我的方法的设计中寻找根本性的缺陷。@AntP我不同意。当然,最好的方法总是找到设计中的缺陷,但并不禁止从方法返回null。在这种情况下,如果文件不存在,您还可以将此方法设计为返回null。然而,我更喜欢抛出一个异常,让调用方处理这种情况。我没有说从一个方法返回null是禁止的,甚至没有说返回null是不好的;然而,仅仅因为不确定还需要做什么而返回任何值是不好的。如果没有有效的执行路径,那么抛出异常(正如您所说)是正确的做法;不只是返回空值并希望得到最好的结果。
try
{
if (File.Exists("D://my.bin"))
{
...
return deserializedObject;
}
}
catch
{
}
return null; // Or return an empty dictionary with:
// return new Dictionary<int, Question>();