错误:"WinWithStudentDatabase.Broker.FillComboBox()":并非所有代码 路径返回一个值。
我知道这个错误意味着什么,但无法弄清楚为什么它不起作用:/...这是我的代码:
public List<Person> FillComboBox()
{
List<Person> personsList = new List<Person>();
try
{
string sql = "SELECT * FROM Tperson";
cmd = new SqlCommand(sql, connection);
connection.Open();
System.Data.SqlClient.SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read() != null)
{
Person p = new Person();
p.Id = Convert.ToInt32(reader["ID"].ToString());
p.FirstName = reader["FirstName"].ToString();
p.LastName = reader["LastName"].ToString();
personsList.Add(p);
}
return personsList;
}
catch (Exception eX)
{
MessageBox.Show(eX.Message);
}
finally
{
if (connection != null)
{
connection.Close();
}
}
}
有什么建议吗? 我只是试图从我的数据库中读取数据并填充组合框,仅此而已。
您已声明函数返回List<Person>
但 catch 块退出而不返回任何内容
catch (Exception eX)
{
MessageBox.Show(eX.Message);
return null;
// or return an empty list if more appropriate
// return new List<Person>();
}
编译器看到您已经编写了一个 catch 块,这意味着您希望在此处处理异常。但是当 catch 块退出时,应该有一个返回值。
很难说在这些情况下返回的正确方式是什么。我个人更喜欢返回一个空对象并在调用代码中对此进行测试。(我避免返回在方法开始时声明的最终部分填充列表)
返回值的方法必须在所有代码路径中具有 return 语句。
在编译时,你的程序无法知道你的catch
块是否有效。这就是为什么你也应该在catch
块中添加一个返回值。
一种解决方案可能是;
catch (Exception eX)
{
MessageBox.Show(eX.Message);
return null;
}
有关更多信息,请查看Methods (C# Programming Guide)
问题:如果您使用的是return
语句,它应该能够从所有代码块返回值。
解决方案 1:因此您需要将其添加到catch
块或函数末尾。
从 try 块中删除 return 语句return personsList;
并将其添加到函数末尾
试试这个:
catch (Exception eX)
{
personsList = null;
}
finally
{
if (connection != null)
{
connection.Close();
}
}
return personsList;
或
在 try 和 catch 块中添加返回语句
catch (Exception eX)
{
MessageBox.Show(eX.Message);
return null;
}