繁体   English   中英

转换清单 <Keyvaluepair> 到特定的ICollection类型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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM