Neuerstellung
This commit is contained in:
45
NHotkey/NHotkey.Wpf/WeakReferenceCollection.cs
Normal file
45
NHotkey/NHotkey.Wpf/WeakReferenceCollection.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace NHotkey.Wpf
|
||||
{
|
||||
class WeakReferenceCollection<T> : IEnumerable<T>
|
||||
where T : class
|
||||
{
|
||||
private readonly List<WeakReference> _references = new List<WeakReference>();
|
||||
|
||||
public IEnumerator<T> GetEnumerator()
|
||||
{
|
||||
var references = _references.ToList();
|
||||
foreach (var reference in references)
|
||||
{
|
||||
var target = reference.Target;
|
||||
if (target != null)
|
||||
yield return (T) target;
|
||||
}
|
||||
Trim();
|
||||
}
|
||||
|
||||
public void Add(T item)
|
||||
{
|
||||
_references.Add(new WeakReference(item));
|
||||
}
|
||||
|
||||
public void Remove(T item)
|
||||
{
|
||||
_references.RemoveAll(r => (r.Target ?? item) == item);
|
||||
}
|
||||
|
||||
public void Trim()
|
||||
{
|
||||
_references.RemoveAll(r => !r.IsAlive);
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user