Суммировать однородный список <object> - PullRequest
1 голос
/ 11 июля 2020

Я работаю над приложением C#. У меня есть несколько списков объектов, т.е. каждый список содержит значения разных типов, такие как double, int et c, хранящиеся в форме объекта в списке. Каждый список содержит объекты одного и того же типа.

List<object> l1 = {1,2,3,4,5,6};

List<object> l2 = {1.1, 2.1, 3.2, 4.2, 5.6, 6.1, 7.5, 8.6, 9.2};

Может быть много других списков разных типов, хранящихся в форме объекта. Моя проблема в том, что мне нужно распознать тип объекта списка по первому значению и добавить все элементы списка. Я использую следующий код, чтобы получить тип.

Type typeOfCurrentField = l1[0].GetType();

Это дает мне тип объекта. Теперь мне нужно преобразовать все значения списка в этот тип. В настоящее время я пробую это:

dynamic sum = null;
Type typeOfCurrentField = null;
for(int i = 0; i < l1.Count; i++)
{
    if (typeOfCurrentField == null)
    {
        typeOfCurrentField = l1[i].GetType();
        sum = Convert.ChangeType(l1[i], typeOfCurrentField);
    }
    else
    {
        sum = sum + Convert.ChangeType(l1[i], typeOfCurrentField);;
    }
    
}

Это дает мне следующее исключение:

Operator '+' cannot be applied to operands of type 'double' and 'object' Exception of type ==> Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

Как я могу решить эту проблему?

1 Ответ

4 голосов
/ 11 июля 2020
dynamic sum = 0;
foreach (var v in l1.Cast<dynamic>())
  sum += v;
...