反射方法调用-转换参数失败



我有一个静态方法,它的签名是:

pubic static foo (float, float, IEnumerable<IEnumerable<double>>)

我使用反射来调用这个方法,参数为

int, int, and List<List<double>>, 

这失败了,在我看来,List<List<double>>参数未能被转换。我使用下面的代码来尝试转换参数。

这可能吗?反射的局限性?我本以为List<double>实现了IEnumerable接口,可以正常工作。

var args = inputportvals.Select(x=>
                             {
            if (x.First is IronPython.Runtime.List || x.First is IDynamicMetaObjectProvider)
            {
                return x.First;
            }
            if (x.First is IEnumerable || x.First is IList)
            {
                return x.First as IEnumerable;
            }
            else
            {
                return Convert.ChangeType(x.First, infos.Where(y=>y.Name == x.Second).First().ParameterType);
            }
        }
        ).ToArray();
 
funcdef.MethodPointer.Invoke(null, args);

List<List<double>>不可转换为IEnumerable<IEnumerable<double>>:

List<List<double>> x = null;
IEnumerable<IEnumerable<double>> y = x; //does not compile and fails with an explicit cast

您需要自己执行转换。例如:

x.Cast<IEnumerable<double>>()

相关内容

  • 没有找到相关文章

最新更新