从 List<WeakReference<T>> 中删除项目的正确方法是什么?

What is the proper way to remove items from a List<WeakReference<T>>?

下面的循环方式,使用TryGetTarget再比较方法是否正确?

void Remove<T>( List<WeakReference<T>> list, T toRemove ) where T : class {
    for(var i=0; i<list.Count; ++i) {
        if(list[i].TryGetTarget(out var el) && el==toRemove) {
            list.RemoveAt(i);
            break;
        }
    }
}

是否有更优雅或建议的方法来做到这一点?

您可以将其缩短为:

list.RemoveAll(item => item.TryGetTarget(out var el) && el == toRemove);