数组对象到通用List<>

时间:2015-11-26 08:33:36

标签: c# arrays generics

我需要从数组对象获得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<> 任何帮助都会很棒。

2 个答案:

答案 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是否为通用列表,然后提取列表中的实际类型)。