-4

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

我还想将每个名称添加到数组中。

我尝试:

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

}
4

2 回答 2

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,异常,}),都会被调用。

于 2013-02-13T14:23:57.600 回答
1

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

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

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

所以,要么使用using block

using (Database db = new Database())
{

}

或者,您可以使用try-finally

  Database db = new Database();
  try
  {

  }
  finally
  {
    if (db != null)
      ((IDisposable)db).Dispose();
  }
于 2013-02-13T14:26:17.797 回答