public ConfigValue[] GetValues(params ConfigParameter[] parameters) { if (Parent != null) { // delegate entirely to the parent var parentValues = Parent.GetValues(parameters); // update the dictionary with values from the parent lock (_lockObject) { foreach (var parentValue in parentValues) { _values[parentValue.Parameter] = parentValue; } } return parentValues; } // No parent, so our values are the single point of truth. var values = new ConfigValue[parameters.Length]; lock (_lockObject) { for (int index = 0; index < values.Length; ++index) { values[index] = GetValueWithoutLock(parameters[index]); } } return values; }
public void SetValue(ConfigParameter parameter, string value) { lock (_lockObject) { if (Parent != null) { Parent.SetValue(parameter, value); } _values[parameter] = new ConfigValue(parameter, value, true); } }