Unable to get the “Add” method of a ColumnDefiniti

2019-07-14 16:49发布

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?

1条回答
The star\"
2楼-- · 2019-07-14 17:07

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.

查看更多
登录 后发表回答