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

本文关键字:是什么 方法 最佳 try catch 初始化 对象 | 更新日期: 2023-09-27 18:24:40

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

  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;
        }
    }
    

哪一个最好?如果有其他方式,请告诉我。我已经和我的同事讨论过这一点,其中一位告诉我,在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。

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

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

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