void AddListValue (TypeData listType, ref object list, int index, object value, bool canCreateInstance)
{
Type type = listType.Type;
if (type.IsArray)
{
list = EnsureArrayIndex ((Array)list, index, type.GetElementType());
((Array)list).SetValue (value, index);
}
else // Must be IEnumerable
{
if (list == null) {
if (canCreateInstance) list = Activator.CreateInstance (type, true);
else throw CreateReadOnlyCollectionException (type.FullName);
}
MethodInfo mi = type.GetMethod ("Add", new Type[] {listType.ListItemType} );
mi.Invoke (list, new object[] { value });
}
}