public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { var instantiableType = GetInstantiableType(destinationType); var elementCollection = (ListElementCollection)value; if (elementCollection == null || !(instantiableType != null)) { return(base.ConvertTo(context, culture, value, destinationType)); } var genericArguments = instantiableType.GetGenericArguments(); var list = (IList)Activator.CreateInstance(instantiableType); foreach (var listItemElement in elementCollection) { list.Add(TypeManipulation.ChangeToCompatibleType(listItemElement.Value, genericArguments[0], null)); } return(list); }
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType) { var instantiableType = GetInstantiableType(destinationType); if (!(value is DictionaryElementCollection elementCollection) || !(instantiableType != null)) { return(base.ConvertTo(context, culture, value, destinationType)); } var dictionary = (IDictionary)Activator.CreateInstance(instantiableType); var genericArguments = instantiableType.GetGenericArguments(); foreach (var listItemElement in elementCollection) { if (string.IsNullOrEmpty(listItemElement.Key)) { throw new ConfigurationErrorsException("Key cannot be null in a dictionary element."); } var compatibleType1 = TypeManipulation.ChangeToCompatibleType(listItemElement.Key, genericArguments[0], null); var compatibleType2 = TypeManipulation.ChangeToCompatibleType(listItemElement.Value, genericArguments[1], null); dictionary.Add(compatibleType1, compatibleType2); } return(dictionary); }
public IEnumerable <Parameter> ToParameters() { foreach (var parameterElement in this) { var localParameter = parameterElement; yield return(new ResolvedParameter((pi, c) => pi.Name == localParameter.Name, (pi, c) => TypeManipulation.ChangeToCompatibleType(localParameter.CoerceValue(), pi.ParameterType, (ICustomAttributeProvider)pi))); } }