Reflection and autogenerated types

c#, system.reflection, vb.net, yield-return

Solution

You can test if the type has the `[CompilerGenerated]` attribute:

if (type.GetCustomAttribute(typeof(CompilerGeneratedAttribute), true) != null)
{
    ...
}

Alternatively, you can check if the name contains characters that wouldn't be valid in user code.

Problem

I have a class with a single method that uses a "yield" return statement. A nested type is automatically created. Using reflection with binding flags set to `BindingFlags.DeclaredOnly`, I get this output: // Public members from my class. Test.FileSystemObject..ctor Test.FileSystemObject.GetFiles(DirectoryInfo directory) Test.FileSystemObject.GetFiles(String path) ``` // Auto generated nested class. Test.FileSystemObject+<GetFiles>d__4..ctor Test.FileSystemObject+<GetFiles>d__4.<>3__directory Test.FileSystemObject+<GetFiles>d__4.<>4__this Test.FileSystemObject+<GetFiles>d__4.<directories>5__7 Test.FileSystemObject+<GetFiles>d__4.<files>5__8 Test.FileSystemObject+<GetFiles>d__4.<FSO>5__6 Test.FileSystemObject+<GetFiles>d__4.<i>5__9 Test.FileSystemObject+<GetFiles>d__4.<unprocessed>5__5 Test.FileSystemObject+<GetFiles>d__4.directory ``` How can I determine whether a type returned by `assembly.GetTypes(BindingsFlags)` is such an auto generated type? I'm looking for a simple way to exclude these.

Original source

Related problems