コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
            }
        }