考虑以下代码:

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());
}

10-06 06:11