c# - 我如何安全地处理变量?
问题描述
我可以在以下代码 中安全地处理变量purge
的替代/更好的方法是什么?factory
public void Run( string XmlFragment ) {
XmlNode xmlNode = null;
try
{
xmlNode = Common.ConstructXmlNodeFromString(XmlFragment, "Params");
var list = DataList();
foreach (var item in list)
{
var factory = new PurgerFactory(item);
IPurger purge = factory.Purger;
purge.Purge();
purge = null;
factory = null;
}
Common.PurgeEmail(SuccessEmail());
}
catch (Exception ex)
{
string errorMessage = $"Purge Error: {ex.Message}. {Environment.NewLine} Stack Trace: {ex.StackTrace}";
Common.PurgeEmail(FailEmail(errorMessage));
}
}
解决方案
我想你知道,C# 有一个垃圾收集器。因此,对于不访问非托管资源的普通对象,只需让垃圾收集器清理它们就可以了。
如果您想确定性地关闭托管资源,则主要范例是继承自IDisposable
一个using
语句。这将在退出 using 语句的代码块时调用 Dispose 函数。
如果你想清理东西,但你不在乎什么时候发生,你可以使用~(MyType)
. 这在 GC 执行 GC 循环时调用,称为 Finalizer。我个人还没有遇到过这个 vs 的用例IDisposable
。但是,如果您只是想确保说一个文件,或者在此电子邮件对象被垃圾收集时被删除,那么这对您来说可能是一个很好的用例。