public void Add(string name, string value) { if (this != _null) { var isType = name.EndsWith(TypeExtension.ValueName.TypePostfix); if (isType) { var type = Type.GetType(value, true); var valueName = name.Substring(0, name.Length - TypeExtension.ValueName.TypePostfix.Length); Add(name, type); object val; TryGetValue(valueName, out val); if (val != null && val.GetType() != type) { base[valueName] = val = TypeExtension.ChangeType(val.ToString(), type); if (valueName == TypeExtension.ValueName.Value) { _value = val; } } } else { object val; var type = TryGetValue(name + TypeExtension.ValueName.TypePostfix, out val) ? (Type)val : null; val = value; if (type != null && type != _value.GetType()) { val = TypeExtension.ChangeType(value, type); } if (ContainsKey(name)) { base[name] = val; } else { Add(name, val); } if (name == TypeExtension.ValueName.Value) { _value = val; } } } }
public void Add(string name, string value) { if (this != _null) { bool isType = name.EndsWith(TypeExtension.ValueName.TypePostfix); if (isType) { Type type = Type.GetType(value, true); string valueName = name.Substring(0, name.Length - TypeExtension.ValueName.TypePostfix.Length); _values[name] = type; object val = _values[valueName]; if (val != null && val.GetType() != type) { _values[valueName] = val = TypeExtension.ChangeType(val.ToString(), type); if (valueName == TypeExtension.ValueName.Value) { _value = val; } } } else { Type type = (Type)_values[name + TypeExtension.ValueName.TypePostfix]; object val = value; if (type != null && type != _value.GetType()) { val = TypeExtension.ChangeType(value, type); } _values[name] = val; if (name == TypeExtension.ValueName.Value) { _value = val; } } } }