使用Reflection调用Cast失败,参数计数不匹配异常

时间:2016-06-09 11:00:05

标签: c# linq generics reflection radgridview

我有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);

上述代码的参数计数不匹配异常。

2 个答案:

答案 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 });