使用反射调用 Cast 失败并出现参数计数不匹配异常

Use Reflection to call Cast fails with Parameter count mismatch exception

我有 Foo 类型的集合。 它绑定到 RadGridView 的 ItemsSource。 我想使用以下代码从 RadGridView 获取所有当前项目 -

var current_collection = gv.Items.Cast<Foo>().ToArray();

我想使用反射动态地执行上述操作,但是在实现时遇到了问题 运行,下面是我目前的代码 -

var t = gv.ItemsSource.GetType().GetGenericArguments().Single();

这里的t是Foo类型

var x = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(t).Invoke(gv.Items, null);

var y = typeof(Enumerable).GetMethod("ToArray").MakeGenericMethod(t).Invoke(x, null);

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

您尝试调用的方法是 static,因此在使用 Invoke 时,您应该将 null 传递给 object obj 参数并通过 object[] parameters argument:

传递所需的参数
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 });

这就是调用这些方法的方法

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