private void AddOrSetImpl(ReadOnlySpan <string> keys, object?data) { string key = keys[0]; if (keys.Length >= 2) { TreeModify childModify; if (ModifyDescriptor.TryGetValue(key, out var oldValue)) { if (oldValue is TreeModify modify) { childModify = modify; } else { throw new AlreadyExitsError(key); } } else { childModify = new TreeModify(); ModifyDescriptor[key] = childModify; } try { childModify.AddOrSetImpl(keys.Slice(1), data); } catch (AlreadyExitsError e) { throw new AlreadyExitsError($"{e.Message}.{key}"); } } else { if (ModifyDescriptor.ContainsKey(key)) { throw new AlreadyExitsError($"{key} is already exists"); } ModifyDescriptor[key] = data; } }
public void AddOrSet(string key, TreeModify tree) { AddOrSetImpl(key, tree); }