C# 在c语言中使用try,catch块而不使用block初始化对象的最佳方法是什么

C# 在c语言中使用try,catch块而不使用block初始化对象的最佳方法是什么,c#,try-catch,C#,Try Catch,我有一个方法,我想在其中初始化对象,例如获取一个类的部门列表,并在try/catch块中使用相同的方法,例如返回该部门列表,然后将其设置为null 单程 public List<Departments> GetAllDepartments() { List<Departments> listDepartments = null; try { listDepartments = IDepartment.GetAllDepartment

我有一个方法,我想在其中初始化对象,例如获取一个类的部门列表,并在try/catch块中使用相同的方法,例如返回该部门列表,然后将其设置为null

单程

public List<Departments> GetAllDepartments()
{
    List<Departments> listDepartments = null;
    try
    {
        listDepartments = IDepartment.GetAllDepartments();

        return listDepartments;
    }
    catch (System.Exception ex)
    {
        throw ex;
    }
    finally
    {
        listDepartments = 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();
}
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; 
    }

为什么捕获异常只是为了重新显示它们?这样会丢失堆栈跟踪。为什么要创建listDepartments而不是简单的返回IDepartment.GetAllDepartments;?为什么在方法末尾将局部变量设置为null?你期望这能实现什么?为什么方法体不仅仅返回IDepartment.GetAllDepartments@DenielKelley谢谢你,但是如果你给出一些代码示例,那么它真的很有帮助。如果你需要重新抛出异常,请改用only throw,它会保留堆栈跟踪。它不仅会吞噬异常,但只捕获System.Exception通常是一种非常糟糕的做法。@MarcGravel将在try/catch中使用相同的方法从question@BinsonEldhose它丝毫没有说要吞下例外;总之,我在这个问题中关注的是,如何优化对象的初始化和返回。catch块中的注释部分是一条建议。我认为抛出相同的异常是个坏主意。与其抛出异常,不如修改或记录异常等。我不确定这如何解决这个问题,因为它没有。让我们贴些东西,希望得到答复。
public List<Departments> GetAllDepartments()
{
    var departments = IDepartment.GetAllDepartments();
    // TODO: do stuff with "departments" here
    return departments;
}
 public List<Departments> GetAllDepartments()
        {
            try
            {
                return IDepartment.GetAllDepartments();


            }
            catch (System.Exception ex)
            {
              //  throw ex;  dont throw the same caugted exception
            }
        }
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; 
    }