/// <summary> /// Provides the implementation for operations that get member values. Classes derived from the <see cref="T:System.Dynamic.DynamicObject" /> /// class can override this method to specify dynamic behavior for operations such as getting a value for a property. /// </summary> /// <returns> /// true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language /// determines the behavior. (In most cases, a run-time exception is thrown.) /// </returns> /// <param name="binder"> /// Provides information about the object that called the dynamic operation. The binder.Name property provides the name of /// the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, /// where sampleObject is an instance of the class derived from the <see cref="T:System.Dynamic.DynamicObject" /> class, binder.Name returns /// "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. /// </param> /// <param name="result"> /// The result of the get operation. For example, if the method is called for a property, you can assign the property /// value to <paramref name="result" />. /// </param> public override bool TryGetMember(GetMemberBinder binder, out object result) { if (!BackingDictionary.TryGetValue(binder.Name, out result)) { result = new ElasticsearchDynamicValue(null); } return(true); }
/// <summary> /// Gets or sets the <see cref="ElasticsearchDynamicValue" /> with the specified name. /// </summary> /// <value>A <see cref="ElasticsearchDynamicValue" /> instance containing a value.</value> public dynamic this[string name] { get { name = GetNeutralKey(name); dynamic member; if (!BackingDictionary.TryGetValue(name, out member)) { member = new ElasticsearchDynamicValue(null); } return(member); } set { name = GetNeutralKey(name); BackingDictionary[name] = value is ElasticsearchDynamicValue ? value : new ElasticsearchDynamicValue(value); } }