DataTable dt= new Datatable();
try {
SqlCommand Cmd = new SqlCommand("sp_getData",SqlCon);
SqlCommand.CommandType= CommandType.StroedProcedure;
SqlCon.Open();
sqlDataReader dr= cmd.ExecuteReader();
dt.Load(dr);
SqlCon.Close();
}
catch(Exception ex) {
}
finally{
dt.Dispose() //
}
return dt;
这段代码合法吗?...我的方法正在返回那个数据表对象,所以在调用 dispose 之后会保留值吗??...请解释...
最佳答案
没有。您将返回一个已处置的对象。
如果您要返回一个IDisposable
,那么期望调用者有责任在处理完对象后处置该对象是完全正常的。因此,您应该按原样返回未处理的 DataTable
对象,并让调用代码处理它。
通常这会使用 using block 来完成。例如:
class MyDisposableObject : IDisposable { /*...*/ }
public MyDisposableObject MakeMeAnObject() { return new MyDisposableObject(); }
public void Main()
{
using(var o = MakeMeAnObject())
{
o.Foo = 1;
o.Bar = 2;
o.FooBar();
}
}
请注意,我确实在您的代码段中看到了一些您没有处理但应该处理的本地 IDisposable
对象。你也在吞下异常。
关于c# - 处理我需要从我的方法返回的数据表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21873440/