2015-09-12 2 views
1

У меня есть статический метод, который имеет подпись:Reflection Метод Invoke - Не удалось преобразовать Parameters

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

Я использую отражение для вызова метода с аргументами

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

это не удается, мне кажется, что параметр List<List<double>> не может быть преобразован. Я использую приведенный ниже код, чтобы попытаться преобразовать параметры

Возможно ли это? Ограничение рефлексии? Я бы подумал, что List реализовал интерфейс 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); 

ответ

1

List<List<double>> не конвертируется в IEnumerable<IEnumberable<double>>:

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

Вам необходимо выполнить преобразование самостоятельно. Например:

x.Cast<IEnumerable<double>>() 
+1

Спасибо, вы можете объяснить мне, почему это так, когда список конвертируется в IEnumerable ? – mjk

Смежные вопросы