title: Copy a anonymous generic List to an anonymous Array
body: <p>I need to copy a anonymous generic List&lt;> to an anonymous Array.
  Fact is that I do not know the Element Type in Design time. All have to be resolved using reflection during run time.
  Please read my Notes in the Code for further Explanation the Problem.
  I need a new Approach to get the this working.</p>
  
  <pre><code>using System;
  using System.Collections;
  using System.Collections.Generic;
  using System.Linq;
  using System.Reflection;
  using System.Text;
  using System.Threading.Tasks;
  
  namespace MapperTestLogic
  {
      public class temp
      {
          //Source is an Object with Properties of Generic Lists, Destination is an Object with Properties of type Array
          //The Property Names are allways the same
          public void Copy(object Source, object Destination) 
          {
              Type sourceType = Source.GetType();
              Type destinationType = Destination.GetType();
  
              foreach (PropertyInfo sourceProp in sourceType.GetProperties())
              {
                  if (sourceProp.GetValue(Source, null) != null)
                  {
                      PropertyInfo destProp = destinationType.GetProperty(sourceProp.Name); //Get the same Property in destination
                      Type sourceItemType;
                      Type destItemType;
  
                      //Destination is Array, Source inherits from IList..
                      if (destProp != null &amp;&amp; destProp.PropertyType.IsArray &amp;&amp; InheritsFromIList(sourceProp, out sourceItemType))
                      {
                          //..get the Source
                          var colSource = ((IEnumerable&lt;dynamic&gt;)sourceProp.GetValue(Source, null)).ToList();
                          var colDestination = destProp.GetValue(Destination, null);
  
                          //..get the Destination Element Type (They are not the same Types as in the List but they have the same name)
                          Type t = colDestination.GetType();
                          destItemType = t.GetElementType();
  
                          var listType = typeof(List&lt;&gt;);
                          var constructedListType = listType.MakeGenericType(destItemType);
                          var listInstance = (IList)Activator.CreateInstance(constructedListType); //Create a new IList-Instance of destination Element Type
  
                          foreach (var sourceItem in colSource)
                          {
                              //Iterate through sourcitems and create instances of destination type
                              var di = Activator.CreateInstanceFrom(destItemType.Assembly.CodeBase, destItemType.FullName);
                              var destItem = di.Unwrap();
                              di = null;
  
                              listInstance.Add(destItem);
                          }
  
                          //Create new Array Instance with the the correct Destination Elementtype in the correct Size..
                          var arrDestination = Activator.CreateInstance(t, new object[] { listInstance.Count });
  
                          //From here on the Code is not working properly
  
                          foreach(var item in listInstance)
                          {
                              arrDestination[0] = item; //Here I will copy the value but get the compiler Error: Cannot apply indexing with [] to an expression of type object
                          }
  
                          //I know why etc. I need now an other approach to solve my problem.
  
  
  
                          destProp.SetValue(Destination, arrDestination);
                      }
                  }
              }
          }
  
          private bool InheritsFromIList(PropertyInfo sourceProp, out Type ItemType)
          {
              ItemType = typeof(NullClass);
  
              foreach (Type interfaceType in sourceProp.PropertyType.GetInterfaces())
              {
                  if (interfaceType.IsGenericType &amp;&amp; interfaceType.GetGenericTypeDefinition() == typeof(IList&lt;&gt;))
                  {
                      //if so, work each element of the List
                      ItemType = sourceProp.PropertyType.GetGenericArguments()[0];
                      break;
                  }
              }
  
              if (ItemType != typeof(NullClass))
              {
                  return true;
              }
              else
              {
                  return false;
              }
          }
      }
  
      internal class NullClass
      {
          //Helperclass for Method InheritsFromIList
      }
  }
  </code></pre>