无法获得"添加" UWP中ColumnDefinitionCollection的方法

时间:2016-10-11 21:18:49

标签: c# .net reflection com uwp

在Windows通用应用程序的上下文中,并使用反射,我试图从Add(内置类型)获取ColumnDefinitionCollection方法

所以我用这个:

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

但它返回null!

Contains方法也会发生这种情况。它们都在ICollection<T>中定义(IList<T>来自它)。

但是,如果我定义自己的类派生自IList<T>,它就可以完美地运行。

然后,如何获取Add方法的MethodInfo? ColumnDefinitionCollection是否使用了一些技巧?也许与COM有关的东西?

1 个答案:

答案 0 :(得分:1)

我真的不知道为什么GetRuntimeMethods没有返回所有方法。这是预期的行为吗?或者这是一个错误?

无论如何,一个解决方案(或可能是一种解决方法)是获取该类型实现的接口,然后获取这些接口的方法,如下所示:

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

在您的具体情况下,这会有效,因为Add实际上是ICollection<T>定义的,ColumnDefinitionCollection是由 textView=(TextView) findViewById(R.id.textview); textView.setMovementMethod(new ScrollingMovementMethod()); String line; char[] buffer=new char[200]; InputStream is = this.getResources().openRawResource(R.raw.test); InputStreamReader isr= new InputStreamReader(is); BufferedReader bfr= new BufferedReader(isr); try { String s=""; while(true) { int temp= bfr.read(buffer,0,buffer.length); if(temp<0) break; else s=s+new String(buffer); } textView.setText(s); } catch (IOException e) { e.printStackTrace(); }finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } 实现的。