这是我的代码。任何人都可以告诉返回声明在哪里?我正在使用3层概念。
DataTable obj_dt = new DataTable();
public DataTable City_Name_get()
{
try
{
string store_pro = "sp_tb_city";
obj_DB_Con.connection_db(store_pro, null);
return obj_dt;
}
catch (Exception ee)
{
MessageBox.Show(ee.Message, "Information", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
答案 0 :(得分:1)
finally
不允许您添加return
声明。看看这个,看看why it is not legal to add control transfer statements in finally
你必须将它完全放在try/catch/finally
之外,或者放在try
和catch
块中,否则编译器将不乐意编译。
public DataTable City_Name_get()
{
try
{
string store_pro = "sp_tb_city";
obj_DB_Con.connection_db(store_pro, null);
return obj_dt;
}
catch (Exception ee)
{
MessageBox.Show(ee.Message, "Information", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;//Or whatever
}
}
或者
public DataTable City_Name_get()
{
try
{
//Do something
}
catch (Exception ee)
{
//Do something more
}
finally
{
//Do something more
}
return someDataTable;
}
答案 1 :(得分:1)
首先,您不应该在方法之外声明和初始化返回对象。我把它移到了下面的代码中。
至于返回,如果是异常,你可以返回null(因为你正在处理方法中的异常)。这样调用者就会知道存在错误。您应记录该方法的行为。
最后不是返回任何东西的地方。它是运行始终必须运行的代码,即使在异常的情况下,例如关闭非托管资源。
public DataTable City_Name_get()
{
DataTable obj_dt = new DataTable();
try
{
string store_pro = "sp_tb_city";
obj_DB_Con.connection_db(store_pro, null);
return obj_dt;
}
catch (Exception ee)
{
MessageBox.Show(ee.Message, "Information", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
}
答案 2 :(得分:1)
这是个人品味的问题。
catch
块将在执行后从方法返回,并且finally
块将在return
语句之前执行,无论其位置如何。
你可能会坚持使用一种风格,但它应该是一致的(当团队范围的风格指南到位时,这就是定义它的地方)。
(就我个人而言,我总是在方法的最后写return
。对我来说,这会使你的可读性更好一些。)
HTH Thomas