c# - 确保 Weakreference 在 IsAlive 之后仍然存在

标签 c# weak-references isalive

如果我遍历 Weakreference 列表,在通过 _ref.IsAlive 验证后,我如何确定该引用仍然存在?

例如我有这段代码,其中 scopeReferencesWeakreference 的一个:

foreach (var _ref in scopeReferences)
{
    if (_ref.IsAlive)
    {
        if (_ref.Target is ScriptScope)
        {
            // Is it alive any more?
            ((ScriptScope)_ref.Target).SetVariable(name, value);
        }
    }
}

也许有人知道答案,我只是不想制造任何问题,因为我不知道这部分发生了什么。非常感谢大家!

最佳答案

你可以将它复制到一个变量中,之后你要么拥有它,要么不拥有它,然后你就可以安全地测试它了:

foreach (var _ref in scopeReferences)
{
    ScriptScope tmp = _ref.Target as ScriptScope;
    if (tmp != null)
    {
        tmp.SetVariable(name, value);
    }
}

关于c# - 确保 Weakreference 在 IsAlive 之后仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34419846/

相关文章:

python - 安全地迭代 WeakKeyDictionary 和 WeakValueDictionary

c# - 撤销 ??运算符(operator)

c# - 为什么此更新会锁定 Oracle 10 中的行?

c# - 在 View 中使用接口(interface)类型作为模型并使用真实类型属性和验证的最佳实践

c# - 将 C++ istringstream 用法转换为 C#

python - python中的弱引用列表

java - 对 WeakReference.get() 对象的硬引用会导致内存泄漏吗?