private object CallConstructor(ConstructorInfo constructor) { ParameterInfo[] parametersInfo = constructor.GetParameters(); object[] parameters = new object[parametersInfo.Length]; int i = 0; foreach (var parameterInfo in parametersInfo) { parameters[i] = objCreator.CreateInstance(parameterInfo.ParameterType) ?? CreateInstance(parameterInfo.ParameterType); i++; } return(constructor.Invoke(parameters)); }
public object Generate(Type type) { if (!GeneratedTypes.Contains(type.GetGenericTypeDefinition())) { throw new ArgumentException(); } ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(IEnumerable <>).MakeGenericType(type.GenericTypeArguments) }); object[] args = new[] { _objCreator.CreateInstance(type.GenericTypeArguments[0].MakeArrayType()) }; return(constructor.Invoke(args)); }
private void FillArray(Array array, int count = 0, int[] elementId = null) { elementId = elementId ?? new int[array.Rank]; for (int i = 0; i < array.GetLength(count); i++) { elementId[count] = i; if (count == array.Rank - 1) { array.SetValue(_objCreator.CreateInstance(array.GetType().GetElementType()), elementId); } else { FillArray(array, count + 1, elementId); } } }