public object Convert(object value, Type settingsType) { if (value is string stringArray) { value = stringArray.Split(new[] { _settingsOptions.ArraySplitDelimiter }, StringSplitOptions.RemoveEmptyEntries) .ToArray(); } var values = value.GetType().IsArray ? (IEnumerable)value : new[] { value }; var elementType = settingsType.GetElementType(); var settingsTypeConverter = _converters.First(x => x.CanConvert(elementType)); var list = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(elementType)); foreach (var item in values) { var convertedValue = settingsTypeConverter.Convert(item, elementType); list.Add(convertedValue); } var toArray = typeof(Enumerable).GetTypeInfo() .GetMethod("ToArray") .MakeGenericMethod(elementType); var array = toArray.Invoke(null, new object[] { list }); return(array); }
public object Convert(object value, Type settingsType) { if (value is string stringArray) { value = stringArray.Split(new[] { _settingsOptions.ArraySplitDelimiter }, StringSplitOptions.RemoveEmptyEntries) .ToArray(); } var values = value.GetType().IsArray ? (IEnumerable)value : new[] { value }; var elementType = settingsType.GetTypeInfo().GetGenericArguments().First(); var configTypeConverter = _converters.First(x => x.CanConvert(elementType)); var instance = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(elementType)); foreach (var item in values) { var convertedValue = configTypeConverter.Convert(item, elementType); instance.Add(convertedValue); } return(instance); }