// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; using System.Dynamic; namespace Microsoft.AspNetCore.JsonPatch { public class DynamicTestObject : DynamicObject { private Dictionary _dictionary = new Dictionary(); public object this[string key] { get => ((IDictionary)_dictionary)[key]; set => ((IDictionary)_dictionary)[key] = value; } public ICollection Keys => ((IDictionary)_dictionary).Keys; public ICollection Values => ((IDictionary)_dictionary).Values; public int Count => ((IDictionary)_dictionary).Count; public bool IsReadOnly => ((IDictionary)_dictionary).IsReadOnly; public void Add(string key, object value) { ((IDictionary)_dictionary).Add(key, value); } public void Add(KeyValuePair item) { ((IDictionary)_dictionary).Add(item); } public void Clear() { ((IDictionary)_dictionary).Clear(); } public bool Contains(KeyValuePair item) { return ((IDictionary)_dictionary).Contains(item); } public bool ContainsKey(string key) { return ((IDictionary)_dictionary).ContainsKey(key); } public void CopyTo(KeyValuePair[] array, int arrayIndex) { ((IDictionary)_dictionary).CopyTo(array, arrayIndex); } public IEnumerator> GetEnumerator() { return ((IDictionary)_dictionary).GetEnumerator(); } public bool Remove(string key) { return ((IDictionary)_dictionary).Remove(key); } public bool Remove(KeyValuePair item) { return ((IDictionary)_dictionary).Remove(item); } public bool TryGetValue(string key, out object value) { return ((IDictionary)_dictionary).TryGetValue(key, out value); } public override bool TryGetMember(GetMemberBinder binder, out object result) { var name = binder.Name; return TryGetValue(name, out result); } public override bool TrySetMember(SetMemberBinder binder, object value) { _dictionary[binder.Name] = value; return true; } } }