考虑以下代码:
var weakRef = new WeakReference(new StringBuilder("Mehran"));
if (weakRef.IsAlive)
{
// Garbage Collection might happen.
Console.WriteLine((weakRef.Target as StringBuilder).ToString());
}
在检查
GC.Collect
之后和使用weakRef.IsAlive
之前,可以运行weakRef.Target
。我错了吗?如果有可能,请问有安全的方法吗?
例如,像
weakRef.GetTargetIfIsAlive()
这样的API将是合适的。 最佳答案
该API已经存在;如果对象已被垃圾回收,则weakRef.Target
返回null
。
StringBuilder sb = weakRef.Target as StringBuilder;
if (sb != null)
{
Console.WriteLine(sb.ToString());
}