用try、catch块初始化对象而不使用c#中的块的最佳方法是什么
本文关键字:是什么 方法 最佳 try catch 初始化 对象 | 更新日期: 2023-09-27 18:24:40
我有一个方法,在该方法中,我想初始化一个类的对象(例如获取Department List),并在try/catch块中使用该对象(例如返回该Department列表),然后将其设置为null。
-
单向
public List<Departments> GetAllDepartments() { List<Departments> listDepartments = null; try { listDepartments = IDepartment.GetAllDepartments(); return listDepartments; } catch (System.Exception ex) { throw ex; } finally { listDepartments = null; } }
-
另一种方式
public List<Departments> GetAllDepartments() { try { List<Departments> listDepartments = IDepartment.GetAllDepartments(); return listDepartments; } catch (System.Exception ex) { throw ex; } }
哪一个最好?如果有其他方式,请告诉我。我已经和我的同事讨论过这一点,其中一位告诉我,在1方法中,我强制编译器初始化对象(这里是listDepartment),首先用null设置,然后强制用数据库对象进行编译。
注意:我无法使用IDisposable。
很抱歉,我在第一轮竞选中未能很清楚地提出这个问题。这只是department的一个例子,实际上在我的方法中还有许多其他过滤器和其他对象。我主要关心的是,当第一行捕获到类似"List-listx=null;"listx=new xClass();或listx=[数据库调用]。正如我的同事告诉我的那样,这对编译器来说是一个额外的开销。我想在这里澄清我的疑虑。
请忘记上面的问题
我在这里重新定义我的问题。
问题:我和我的一位同事就初始化对象并在使用后将其设置为null展开了争论。
我建议他使用以下方法来释放物体:
public string something()
{
Department objDepartment = null;
try
{
objDepartment = new Department();
}
catch
.
.
.
finally
{
objDepartment = null;
}
}
我的办公室伙伴告诉我,首先,我强制.net编译器用null初始化objDepartment,然后在try块内,我再次强制.net编译器使用实际实例初始化objDepartment。所以根据他的说法,代码应该是:
public string something()
{
try
{
Department objDepartment = new Department();
}
catch
.
.
.
}
所以我的问题是:一旦对象被利用,我如何释放它,因为objDepartment在finally块中不可用,因为它的作用域现在只在try块中。如果有其他初始化方法,请使用它并最终释放它。
另一个条件是,我不能使用IDisposable。
感谢所有参与并给出答案的人。我再次期待你的积极参与。
public List<Departments> GetAllDepartments()
{
return IDepartment.GetAllDepartments();
}
这是问题中唯一有用的代码。在退出之前将局部(也称为方法变量)设置为null
没有任何意义或好处;它没有任何用途,也不代表"集合"或任何类似的东西,因此finally
没有意义。catch
块同样是无用的,除非您的明确意图是破坏您自己的堆栈跟踪。
如果您需要在返回对象之前对其执行额外的代码:
public List<Departments> GetAllDepartments()
{
var departments = IDepartment.GetAllDepartments();
// TODO: do stuff with "departments" here
return departments;
}
由于您没有执行任何自定义异常,因此try-and-catch在这种情况下没有任何意义。因此,您可以使用以下代码。
public List<Departments> GetAllDepartments()
{
return IDepartment.GetAllDepartments();
}
您可以使用以下代码。它将避免多个返回语句。
public List<Departments> GetAllDepartments()
{
List<Departments> listDepartments = null;
try
{
listDepartments = IDepartment.GetAllDepartments();
}
catch (System.Exception ex)
{
//Handle your exception
}
return listDepartments;
}
public List<Departments> GetAllDepartments()
{
try
{
return IDepartment.GetAllDepartments();
}
catch (System.Exception ex)
{
// throw ex; dont throw the same caugted exception
}
}