I have a Dictionary of multicast delegates where the key is a particular message type and the values are multicast delegates i.e. message handlers.
When I want to clear down that Dictionary I want to ensure that all delegates are unbound and dereferenced and ultimately garbage collected - is it sufficient to clear down the dictionary or should I enumerate the values (multicast delegates) and set them to null first before clearing down the dictionary?
Just set them to null.
And when the compiler no longer has any references to these it's gonna garbace collect it for you.
Ultimately, just make the whole dict to null:
Garbage collection in C# should not be an issue.