public static void AddRange <T>(this ICollection <T> items, object vt, Func <T> factory = null) where T : class { object[,] vtdata = vt as object[, ]; int n = vtdata.GetLength(0); int k = vtdata.GetLength(1); Type t = typeof(T); bool implementsIXlObjectMapping = typeof(IXLObjectMapping).IsAssignableFrom(t); XLObjectMapping map = implementsIXlObjectMapping ? null : _types.GetOrAdd(t, f => new XLObjectMapping(t)); for (int i = 0; i < n; i++) { T instance = (factory != null) ? factory() : (t.GetConstructor(Type.EmptyTypes) != null) ? (T)Activator.CreateInstance(t, new object[0]) : Activator.CreateInstance <T>(); if (implementsIXlObjectMapping) { var xlob = instance as IXLObjectMapping; for (int j = 0; j < k; j++) { xlob.SetColumn(j, vtdata[i, j]); } } else { for (int j = 0; j < k; j++) { map.SetColumn(instance, j, vtdata[i, j]); } } items.Add(instance); } }
public static void SetObjectMapping(XLObjectMapping mapping) { _types.AddOrUpdate(mapping.MappedType, mapping, (t, m) => mapping); }