There's also an ephemeron implemenation using a new class called System.Runtime.CompilerServices.ConditionalWeakTable which is detailed here.
This is useful for collecting dynamic languages which allow setting arbitary "properties" on arbitrary instances.