Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射方法调用进行类型转换时出错_C#_Reflection - Fatal编程技术网

C# 使用反射方法调用进行类型转换时出错

C# 使用反射方法调用进行类型转换时出错,c#,reflection,C#,Reflection,我有一个方法调用,如下所示: splitByRegex(regexPattern, lines, ref lineIndex, capacity, result => { List<object> res = result.Select(selector).ToList(); MessageBox.Show(res[0].GetType().ToString()); collection.GetType().GetMethod("AddRan

我有一个方法调用,如下所示:

splitByRegex(regexPattern, lines, ref lineIndex, capacity, result =>
{
      List<object> res = result.Select(selector).ToList();
      MessageBox.Show(res[0].GetType().ToString());
      collection.GetType().GetMethod("AddRange").Invoke(collection, new object[] { res });
});
splitByRegex(regexpatern,line,ref-lineIndex,capacity,result=>
{
List res=result.Select(选择器).ToList();
Show(res[0].GetType().ToString());
collection.GetType().GetMethod(“AddRange”).Invoke(集合,新对象[]{res});
});
splitByRegex
方法将分割数据并返回
结果

我必须将获得的
结果
添加到通用
集合

选择器的类型
函数:
Func

示例选择器函数:
x=>新商户{MerchantName=x.Item1,Count=Convert.ToInt64(x.Item2),Percentage=Convert.ToDecimal(x.Item3)}

使用反射执行
AddRange
方法调用时:
collection.GetType().GetMethod(“AddRange”).Invoke(集合,新对象[]{res})

我遇到以下错误:

“System.Linq.Enumerable+WhereSelectListIterator”类型的对象不能转换为“System.Collections.Generic.IEnumerable`1[Processing.Merchant]”类型。


当我试图从
列表res
MessageBox.Show(res[0].GetType().ToString())打印任何一个对象的类型时,它显示为
商户
类型对象。那我为什么会犯这个错误呢

@John-谢谢你指点我。这说明了这一点。 我通过不调用
AddRange
方法修复了它,但是为获得的结果中的每个元素调用泛型集合的
Add
方法

splitByRegex(regexPattern, lines, ref lineIndex, capacity, result =>
{
     MethodInfo method = collection.GetType().GetMethod("Add");
     result.Select(selector).ToList().ForEach(item => method.Invoke(collection, new object[] { item }));
});

因为
List
不是
List
IEnumerable
,就像
List
不是
List
偶数一样(其中
Cat:Animal
),即使列表中只包含猫。埃里克的回答很好地说明了这一点。@John-我如何动态转换它?我是否需要使用接口,因为多重类型可以作为选择器功能的一部分?我不确定是否有特别好的方法来实现这一点。向我们展示更多您的方法帮助(即,它是否可以成为通用的?)