我有一个linq2sql datacontext被处理掉了。但是当我检查null时,我总是有一个错误的条件。
DataClasses1DataContext dc = new DataClasses1DataContext();
dc.Dispose();
进一步的其他代码
if (dc == null) {
// ALWAYS FALSE
}
如何判断datacontext是否已被处理?
更新: 让我澄清一下自己。我得到一个datacontext但有时外部代码传递一个对象(它不是null,但已经被处理掉了)。我需要检查对象是否存在。我想的是别的东西而不是试一试。
答案 0 :(得分:5)
DataContext
类不会公开任何可以告诉您是否已被处置的属性
但是,您可以通过覆盖Dispose(bool)
方法自行创建一个:
public bool IsDisposed { get; private set; }
protected override void Dispose(bool disposing) {
IsDisposed = true;
}
答案 1 :(得分:1)
调用Dispose()不会清除对象的引用。如果dc是一个字段,那么处理这个适用于所有可沉浸类的简单方法是在调用Dispose()后立即手动分配dc = null;
。这也意味着即使您的班级存在更长时间,数据上下文也有资格进行垃圾收集。
如果dc是局部变量,只需使用:
using(var dc = new YourDataContext()) {
...
}