我有一个方法,其中我想初始化一个Class的对象(例如,获取Department List)并在try / catch块中使用它(例如返回Department List),然后想要将它设置为null。 / p>
单程
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。
对不起,我无法在第一轮就提出这个问题。这只是部门的一个例子,实际上我的方法中还有许多其他过滤器和其他对象。我主要担心的是,当第一行捕获时,编译器将如何工作,如列表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。
感谢所有参与并给出答案的人。还有一次我期待你的积极参与。
答案 0 :(得分:4)
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;
}
答案 1 :(得分:1)
由于你没有做任何自定义异常,因此在这种情况下try和catch没有任何意义。因此,您可以使用代码。
public List<Departments> GetAllDepartments()
{
return IDepartment.GetAllDepartments();
}
答案 2 :(得分:-2)
您可以使用以下代码。它将避免多个return语句。
public List<Departments> GetAllDepartments()
{
List<Departments> listDepartments = null;
try
{
listDepartments = IDepartment.GetAllDepartments();
}
catch (System.Exception ex)
{
//Handle your exception
}
return listDepartments;
}
答案 3 :(得分:-4)
public List<Departments> GetAllDepartments()
{
try
{
return IDepartment.GetAllDepartments();
}
catch (System.Exception ex)
{
// throw ex; dont throw the same caugted exception
}
}