我有Foo类型的集合。 它绑定到RadGridView的ItemsSource。 我想使用下面的代码 -
从RadGridView获取所有当前项目var current_collection = gv.Items.Cast<Foo>().ToArray();
我想使用反射动态地执行上述操作,但无法使其运行,下面是我的代码到目前为止 -
var t = gv.ItemsSource.GetType().GetGenericArguments().Single();
这里是Foo类型。
var x = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(t).Invoke(gv.Items, null);
var y = typeof(Enumerable).GetMethod("ToArray").MakeGenericMethod(t).Invoke(x, null);
上述代码的参数计数不匹配异常。
答案 0 :(得分:1)
您尝试调用的方法是静态,因此在使用Invoke
时,您应该将null
传递给object obj
参数并传递必需的参数通过object[] parameters
参数:
var x = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(t)
.Invoke(null, new object [] { gv.Items });
var y = typeof(Enumerable).GetMethod("ToArray").MakeGenericMethod(t)
.Invoke(null, new object[] { x });
答案 1 :(得分:1)
这是你如何调用这些方法
var x = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(t).Invoke(null, new object[] { gv.Items });
var y = typeof(Enumerable).GetMethod("ToArray").MakeGenericMethod(t).Invoke(null, new object[] {x });