/// <summary>
        /// Get the meta-data for values from this profile for the
        /// specified property.
        /// </summary>
        /// <param name="propertyName">
        /// The name of the property to get values for.
        /// </param>
        /// <returns>
        /// The value meta-data for the specified property on this profile.
        /// </returns>
        public IEnumerable <IValueMetaData> GetValues(string propertyName)
        {
            using (var values = _engine.MetaData.getValuesForProfile(_source))
            {
                for (uint i = 0; i < values.getSize(); i++)
                {
#pragma warning disable CA2000 // Dispose objects before losing scope
                    // This instance will be returned by this method so
                    // we don't want to dispose of it.
                    var value = new ValueMetaData(_engine, values.getByIndex(i));
#pragma warning restore CA2000 // Dispose objects before losing scope
                    using (var valueProperty = value.GetProperty())
                    {
                        if (propertyName.Equals(valueProperty.Name,
                                                StringComparison.OrdinalIgnoreCase))
                        {
                            yield return(value);
                        }
                        else
                        {
                            value.Dispose();
                        }
                    }
                }
            }
        }