在Windows通用应用程序的上下文中,并使用反射,我试图从ColumnDefinitionCollection
(内置类型)获得Add
方法
所以我用这个:
type.GetRuntimeMethods().First(info => info.Name == "Add");
但是它返回null!
这也发生在Contains
方法中。它们都在ICollection<T>
中定义(IList<T>
由此衍生)。
然而,如果我定义自己的类从IList<T>
派生,它工作得很好。
那么,我如何为Add方法获得MethodInfo ?ColumnDefinitionCollection
使用了一些技巧吗?也许是和COM有关的东西?
我真的不知道为什么GetRuntimeMethods
不返回所有的方法。这是预期的行为吗?还是一个bug?
无论如何,一个解决方案(或者可能是一个变通方法)是获取该类型实现的接口,然后像这样获取这些接口的方法:
var methodsOfImplementedInterfaces =
type
.GetTypeInfo()
.ImplementedInterfaces
.SelectMany(x => x.GetRuntimeMethods())
.ToList();
在您的具体情况下,这将工作,因为Add
实际上是在ICollection<T>
上定义的,ColumnDefinitionCollection
实现了