我想在函数完成后处理实例。我认为......“使用”的东西......
也 我想将每个名称添加到一个数组。
我试试:
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();
}
}
答案 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();
}