`请新手编程,并在解决方案的最后几个小时内搜索但是找不到一个;所以这是我的问题:
我有List<KeyValuePair<string, object>>
我想在运行时将值对转换为ICollection<T>
其中T是对象的类型(值对)。
转换的目的是将值传递给PropertyInfo.SetValue(obj,val)方法。其中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#“
答案 0 :(得分:2)
如果键值对的值为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>