我有这样的代码:
~MyClass() {
try {
if (Database.Exists(_connectionString))
{
Database.Delete(_connectionString);
}
} catch { }
}
Database
是实体框架的静态类,而_connectionString
是private readonly string
由ctor设置的。这个想法是,如果有人忘记 Dispose 类,我们仍然清理状态(在我的情况下,这是集成测试的一部分,如果测试中存在未处理的异常,测试运行程序不会调用 Dispose,所以这不是什么我可以解决我的问题)
但是,终结器通常不应该调用类成员,因为它们可能已经被释放,所以如果我最终处于_connectionString
已经收集的场景中,我可能会遇到问题。
有没有办法安全地做到这一点(例如,使用某种GC.KeepAlive
构造?)