![](/img/trans.png)
[英]How to convert ICollection<ICollection<int>> to List<List<int>> in C#
[英]convert an List<Keyvaluepair> to a specific ICollection type C#
Please请成为编程的新手,并在过去的几个小时内搜索了一种解决方案,但找不到解决方案; 所以这是我的问题:
我有一个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#”
如果键值对具有一个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>
因此您几乎可以肯定地将此列表传递给需要ICollection<T>
的SetProperty
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.