我已经在使用块中声明了数据表,该块在作用域的末尾调用了Dispose方法。
using (DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems())
{
...
}
但是在反射器中,数据表并不具有Dispose
函数
怎么样?
答案 0 :(得分:3)
System.Data.DataTable
扩展System.ComponentModel.MarshalByValueComponent
,MarshalByValueComponent实现IDisposable
。
反射器不会显示基本类型的方法,除非它们在派生类型中被覆盖。
答案 1 :(得分:3)
DataTable
继承自实现MarshalByValueComponent
接口的IDisposable
类(见下文),C#允许为派生类的实例调用基类公共方法。
public class DataTable : MarshalByValueComponent,
IListSource, ISupportInitializeNotification,
ISupportInitialize, ISerializable, IXmlSerializable
public class MarshalByValueComponent :
IComponent, IDisposable, IServiceProvider
您的代码块将在引擎盖下表示,如下所示,因此它保证将调用Dispose()方法:
{
DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems()
try
{
// .. code inside using statement
}
finally
{
if (dt != null)
((IDisposable)dt).Dispose();
}
}
有关详细信息,请参阅MSDN:using Statement
答案 2 :(得分:-1)
为什么要尝试处理DataTable?如果你真的想要这样做,你应该从它的DataSet中删除它。