public void DynamicTypeEraser() { string source = @" using System; using System.Collections.Generic; public struct A<S, T> { public enum E { A } public class B<R> { } } unsafe public class C<X> { public Func<A<dynamic, A<dynamic, bool>.E*[]>.B<X>, Dictionary<dynamic[], int>> F; } "; var compilation = CreateCompilationWithMscorlibAndSystemCore(source, compOptions: TestOptions.UnsafeDll); compilation.VerifyDiagnostics(); var c = compilation.GlobalNamespace.GetMember<TypeSymbol>("C"); var f = c.GetMember<FieldSymbol>("F"); var eraser = new DynamicTypeEraser(compilation.GetSpecialType(SpecialType.System_Object)); var erasedType = eraser.EraseDynamic(f.Type); Assert.Equal("System.Func<A<System.Object, A<System.Object, System.Boolean>.E*[]>.B<X>, System.Collections.Generic.Dictionary<System.Object[], System.Int32>>", erasedType.ToTestDisplayString()); }