/// <summary>
        /// Converts a value from the source vocabulary item units to
        /// the base units of the vocabulary.
        /// </summary>
        ///
        /// <remarks>
        /// This method does not check the sign of the value. The caller
        /// is responsible for ensuring the input data value make sense for
        /// the input vocabulary item.
        /// </remarks>
        ///
        /// <param name="vocabularyItem">The vocabulary item of the data
        /// value to convert to base units.</param>
        ///
        /// <param name="value">The data value to convert to base units.
        /// </param>
        ///
        /// <returns>The converted data value in the base units for the
        /// vocabulary.
        /// </returns>
        ///
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="vocabularyItem"/> parameter is <b>null</b>.
        /// </exception>
        ///
        /// <exception cref="NotSupportedException">
        /// The <paramref name="vocabularyItem"/> parameter does not
        /// support conversions to base units.
        /// </exception>
        ///
        /// <exception cref="ConversionFailureException">
        /// An unknown or unsupported conversion is encountered or
        /// an error occurs during the conversion to base units.
        /// </exception>
        ///
        public static double ConvertToBaseUnits(
            VocabularyItem vocabularyItem,
            double value)
        {
            Validator.ThrowIfArgumentNull(vocabularyItem, nameof(vocabularyItem), Resources.VocabularyItemNull);

            if (vocabularyItem.InfoXml == null)
            {
                throw new NotSupportedException(Resources.VocabularyItemConversionNotSupported);
            }

            XPathNavigator nav = vocabularyItem.InfoXml.CreateNavigator();

            try
            {
                nav = nav.SelectSingleNode("unit-conversions/base-unit-conversion");
            }
            catch (Exception)
            {
                // this can occur if conversion xml is corrupted. We don't
                // want to expose xml parse issues here to the outside world
                // as recommended by the .NET documentation for
                // XPathNavigator
                throw new ConversionFailureException(Resources.VocabularyItemConversionGeneralException);
            }

            if (nav == null)
            {
                throw new NotSupportedException(Resources.VocabularyItemConversionNotSupported);
            }

            return(DoConversion(nav, value));
        }
Beispiel #2
0
 internal override void AddVocabularyItem(string key, VocabularyItem item)
 {
     base.AddVocabularyItem(key, item);
     _orderedItemsList.Add(item);
 }