Search code examples
c#.netreflectioncomuwp

Unable to get the "Add" method of a ColumnDefinitionCollection in UWP


In the context of a Windows Universal Application, and using reflection, I'm trying to get the Add method from a ColumnDefinitionCollection (the built-in type)

So I use this:

type.GetRuntimeMethods().First(info => info.Name == "Add");

BUT it returns null!

It also happens with the Contains method. Both of them are defined in ICollection<T> (IList<T> derives from it).

However, if I define my own class deriving from IList<T>, it works perfectly.

Then, how do I get a MethodInfo for the Add method? Is ColumnDefinitionCollection using some tricks? Maybe something related to COM?


Solution

  • I really don't know why GetRuntimeMethods is not returning all methods. Is this the expected behavior? Or is it a bug?

    Anyway, one solution (or probably a workaround) is to obtain the interfaces that the type implements and then get the methods of these interfaces like this:

    var methodsOfImplementedInterfaces = 
        type
            .GetTypeInfo()
            .ImplementedInterfaces
            .SelectMany(x => x.GetRuntimeMethods())
            .ToList();
    

    In your specific case, this will work because Add is actually defined on ICollection<T> which is implemented by ColumnDefinitionCollection.