2017-02-10 4 views
0

`Пожалуйста, новичок в программировании, и также искали последние несколько часов на решении, но не можете найти его; Так вот моя проблема:преобразовать список <Keyvaluepair> в конкретный тип ICollection C#

У меня есть List<KeyValuePair<string, object>> Я хочу, чтобы преобразовать пару значений во время выполнения в ICollection<T>

Где T тип объекта (пары Value).

Целью преобразования является передача значений в метод PropertyInfo.SetValue (obj, val). Допустимы ICollection

public object TheMEthod(object objreactor, List<KeyValuePair<string, object>> objactor) { 

    Type tyr2 = typeof(List<>).MakeGenericType(objactor.First().Value.GetType()); 

    ICollection list = (ICollection) Activator.CreateInstance(tyr2); 
    list = (ICollection) objactor.Select(l => l.Value).Distinct().ToList(); 

       objreactor.GetType().GetProperty(objactor.First().Key)?.SetValue(objreactor, Convert.ChangeType(list, objactor.First().Value.GetType()), null); 

      //else return exception 

      return objreactor; 


     } 

Это возвращает объект ошибки должен реализовать IConvertible C#»

+2

Не могли бы вы немного разобраться? Список > уже является ICollection > (список поддерживает этот интерфейс), или вам нужно было преобразовать его в нечто другое? –

+0

Когда я передаю пару значений кода (не нужен ключ) – Ufo

+0

Поделитесь своим кодом. –

ответ

2

Если KeyValue пара имеет object как значение, но вам это нужно, чтобы быть конкретным объектом T вы будете нужно бросить его. Это будет работать только если Valueдействительно правильный тип.

List<KeyValuePair<string, object>> list = .... 

ICollection<TheRealObject> coll = list.Select(x => x.Value) // Select the Values 
             .Cast<TheRealObject>() //Cast them to your type 
             .ToList(); // turn it to a list 

Обратите внимание, что List<T>являетсяICollection<T>, поэтому вы можете почти наверняка передать этот список SetProperty, ожидающий ICollection<T>

+0

Проблема с приведенным выше кодом заключается в том, что я хочу иметь возможность динамически устанавливать тип TheRealObject в реальном времени для разных объектов типы – Ufo

Смежные вопросы