/// <summary> /// Reads the option value /// </summary> /// <typeparam name="T">Option type</typeparam> /// <param name="option">Option reference</param> /// <returns>Option value</returns> public T Read <T>(Option <T> option) { CheckConfigured(); CheckCanParse(option.NonNullableType); OptionValue optionValue; _nameToOptionValue.TryGetValue(option.Name, out optionValue); if (!optionValue.IsExpired(_config.CacheTimeout)) { return((T)optionValue.RawValue); } string value = ReadFirstValue(option.Name); if (value == null) { optionValue.RawValue = option.DefaultValue; } else if (DefaultParser.IsSupported(option.NonNullableType)) { object resultObject; if (DefaultParser.TryParse(value, option.NonNullableType, out resultObject)) { optionValue.Update <T>((T)resultObject); } else { optionValue.Update(option.DefaultValue); } } else { ITypeParser typeParser = _config.GetParser(option.NonNullableType); object result; typeParser.TryParse(value, option.NonNullableType, out result); optionValue.Update <T>((T)result); } OnReadOption(option, optionValue.RawValue); return((T)optionValue.RawValue); }
public bool TryParse(Type propertyType, string rawValue, out object result) { if (_defaultParser.IsSupported(propertyType)) //type here must be a non-nullable one { if (!_defaultParser.TryParse(rawValue, propertyType, out result)) { return(false); } } else { ITypeParser typeParser = GetParser(propertyType); if (!typeParser.TryParse(rawValue, propertyType, out result)) { return(false); } } return(true); }
public bool IsSupported(Type t) { return(_supportedTypes.Contains(t) || _defaultParser.IsSupported(t)); }