gpt4 book ai didi

c# - 使用反射方法调用的类型转换错误

转载 作者:行者123 更新时间:2023-11-30 22:52:04 25 4
gpt4 key购买 nike

我有一个方法调用如下:

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方法将拆分数据并返回 result .

我必须添加获得的 result通用 collection .

selector 的类型功能:Func<Tuple<string, string, string>, object>

样本选择器函数:x => new Merchant { MerchantName = x.Item1, Count = Convert.ToInt64(x.Item2), Percentage = Convert.ToDecimal(x.Item3) }

在执行 AddRange 时使用反射的方法调用: collection.GetType().GetMethod("AddRange").Invoke(collection, new object[] { res });

出现以下错误:

类型为“System.Linq.Enumerable+WhereSelectListIterator 2[System.Tuple”的对象3[System.String,System.String,System.String],System.Object]' 无法转换为类型 'System.Collections.Generic.IEnumerable`1[Processing.Merchant]'。

当我尝试从 List<object> res 打印任何一个对象的类型时MessageBox.Show(res[0].GetType().ToString()); , 它显示为 Merchant类型对象。那么为什么我会收到此错误?

最佳答案

@John - 感谢您将我指向 Eric's post .这就很清楚了。我通过不调用 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 }));
});

关于c# - 使用反射方法调用的类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com