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

时间:2014-09-25 10:45:30

标签: c# try-catch

我有一个方法,其中我想初始化一个Class的对象(例如,获取Department List)并在try / catch块中使用它(例如返回Department List),然后想要将它设置为null。 / p>

  1. 单程

    public List<Departments> GetAllDepartments()
    {
        List<Departments> listDepartments = null;
        try
        {
            listDepartments = IDepartment.GetAllDepartments();
    
            return listDepartments;
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            listDepartments = null;
        }
    }
    
  2. 另一种方式

    public List<Departments> GetAllDepartments()
    {
        try
        {
            List<Departments> listDepartments = IDepartment.GetAllDepartments();
    
            return listDepartments;
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
    }
    
  3. 哪一个最好?如果有其他方式,请告诉我。我和我的办公室伙伴讨论过这个问题,有人告诉我,在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。

    感谢所有参与并给出答案的人。还有一次我期待你的积极参与。

4 个答案:

答案 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
            }
        }