我需要从数组对象获得List<>
个对象。
问题是我默认情况下不知道我的通用项目的类型。
public override bool Get<T>(string key, out T value)
{
var cachedValue = <SOME OBJECT FROM SOMEWHERE OUT OF SPACE>;
if (cachedValue is Array)
{
IEnumerable<object> collection = (IEnumerable<object>)cachedValue;
var item = collection.ToList()[0];
Type type = item.GetType();
value = (T)(Activator.CreateInstance(typeof(type),collection));
}
else
{
...
}
该片段就是这样......但我也有例外
&#34;未找到类型的构造函数&#34;
无论如何,我已将Array对象的值参数设置为List<>
任何帮助都会很棒。
答案 0 :(得分:0)
如果传递给Activator的Type
是正确的,那么传递给Activator
(作为类型)的类应该具有:
IEnumerable<object>
一个答案 1 :(得分:0)
您可以这样做,假设您将T
作为通用类型传递,该列表包含:
if (cachedValue is Array)
{
value = ((Array)cachedValue).Cast<T>.ToList();
}
但在这种情况下,您的方法签名必须是:
public override bool Get<T>(string key, out List<T> value)
如果您将List<type>
作为T
传递,则需要更多工作(您需要检查T
是否为通用列表,然后提取列表中的实际类型)。