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-我如何动态转换它?我是否需要使用接口,因为多重类型可以作为选择器功能的一部分?我不确定是否有特别好的方法来实现这一点。向我们展示更多您的方法帮助(即,它是否可以成为通用的?)