在Windows通用应用程序的上下文中,并使用反射,我试图从Add
(内置类型)获取ColumnDefinitionCollection
方法
所以我用这个:
type.GetRuntimeMethods().First(info => info.Name == "Add");
但它返回null!
Contains
方法也会发生这种情况。它们都在ICollection<T>
中定义(IList<T>
来自它)。
但是,如果我定义自己的类派生自IList<T>
,它就可以完美地运行。
然后,如何获取Add方法的MethodInfo?
ColumnDefinitionCollection
是否使用了一些技巧?也许与COM有关的东西?
答案 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();
}
}
实现的。