一旦完成就如何处置

时间:2013-02-13 14:21:25

标签: c# asp.net

我想在函数完成后处理实例。我认为......“使用”的东西......

也 我想将每个名称添加到一个数组。

我试试:

      using(  Database db = new Database())

    public string[] FindNameByLength(int minimumCharNumber)
    {

        try{
        var query = from u in db.Users
                    where u.FullName.Length > minimumCharNumber
                    select u.FullName;


        string[] namesLength;
        int counter;

        foreach (var s in query)
        {
            namesLength.Concat(new[] {s });
        }
        return namesLength;
        }
        finally IDisposable(db).dispose();
    }

}

2 个答案:

答案 0 :(得分:6)

using(...)
{
    ...
}

你的功能。也不要明确调用Dispose

public string[] FindNameByLength(int minimumCharNumber)
{
    using (Database db = new Database())
    {
        var query = from u in db.Users
                    where u.FullName.Length > minimumCharNumber
                    select u.FullName;

        string[] namesLength;
        int counter;

        foreach (var s in query)
        {
            namesLength.Concat(new[] { s });
        }

        return namesLength;
    }
}
此处也不需要

Finally,因为无论您如何退出Dispose范围(using,例外,return,始终会调用} })。

答案 1 :(得分:1)

参考using Statement:提供方便的语法,确保正确使用IDisposable对象。

通常,当您使用IDisposable对象时,您应该在using语句中声明并实例化它。 using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。在using块中,该对象是只读的,不能修改或重新分配。

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句。

所以,要么使用使用块

using (Database db = new Database())
{

}

或者,您可以使用 try-finally

  Database db = new Database();
  try
  {

  }
  finally
  {
    if (db != null)
      ((IDisposable)db).Dispose();
  }