[英]Convert.ChangeType (Error: Object must implement IConvertible) when Dynamically Convert object to IList fails Why?
我正在使用Convert.ChangeType(object, Type)
方法将对象转换为它们的类型。 它工作得很好。 当我尝试将Object
(类型为List<string>
)转换回List<string>
<string> 时,它工作得很好。 但是,当我尝试将Object
转换为IList<string>
时,它失败了。
问题:当我尝试将应为IList
IList
,它失败并显示错误消息“对象必须实现 IConvertible”
IList<string> myList = new List<string>();
object myObject = myList;
Type myType = typeOf(IList<string>);
Convert.ChangeType(myObject, myType);
任何人都知道如何成功地将 object 转换回其原始类型的 IList... 或者有人知道如何将原本是 IList 的 object 转换为列表吗? 要么工作。
下面的代码解决了我的问题:
// Initial objects (the original IList object ended up as an object plus a Type)
IList<string> stringList = new List<string>(); // dont' have access to this form of the object
object myObject = stringList;
Type originalType = typeof(List<string>);
// Converting object to a List<string>
if(originalType.Name.StartsWith("IList"))
{
Type myNewList = typeof(List<>);
Type typeInIList = originalType.GenericTypeArguments[0];
Type aStringListType = myNewList.MakeGenericType(typeInIList);
dynamic newStringList = Convert.ChangeType(myObject, aStringListType);
}
无需使用Convert.ChangeType
或dynamic
。 如果 object 实际上是IList<string>
,您可以使用is
类型模式来检查它:
if (myObject is IList<string> list) {
// "list" is the converted list
} else {
// conversion fails
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.