Ошибка преобразования типа при использовании метода отражения - PullRequest
2 голосов
/ 25 октября 2019

У меня есть вызов метода следующим образом:

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. Так почему я получаю эту ошибку?

1 Ответ

2 голосов
/ 25 октября 2019

@ Джон - Спасибо, что указали мне на сообщение Эрика . Это проясняет. Я исправил это, не вызывая метод 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 }));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...