void Walk(string loc, string expr, object value, string path, WalkCallback callback) { if (_system.IsPrimitive(value)) { return; } if (_system.IsArray(value)) { var list = (IList)value; for (int i = 0; i < list.Count; i++) { callback?.Invoke(i, loc, expr, value, path); } } else { if (_system.IsObject(value)) { foreach (string key in _system.GetMembers(value)) { callback?.Invoke(key, loc, expr, value, path); } } } }
void Walk(string loc, string expr, object value, string path, WalkCallback callback) { if (_system.IsPrimitive(value)) { return; } if (_system.IsArray(value)) { var list = (IList)value; for (var i = list.Count - 1; i >= 0; i--) { callback(i, loc, expr, value, path); } } else if (_system.IsObject(value)) { foreach (var key in _system.GetMembers(value).Reverse()) { callback(key, loc, expr, value, path); } } }