Looking at the TryGetValue method decompiled to VB, the "out" parameter gets decompiled to:
<System.Runtime.InteropServices.OutAttribute()> ByVal value As TValue
This is incorrect; we must use "ByRef" for out parameters. Also, it would be better to just use the short name for the attribute " ByRef value As TValue".