using LoreSoft.MathExpressions.Metadata; namespace LoreSoft.MathExpressions.UnitConversion { /// Units for Length public enum LengthUnit { /// Millimeter unit (mm) [Abbreviation("mm")] Millimeter = 0, /// Centimeter unit (cm) [Abbreviation("cm")] Centimeter = 1, /// Meter unit (m) [Abbreviation("m")] Meter = 2, /// Kilometer unit (km) [Abbreviation("km")] Kilometer = 3, /// Inch unit (in) [Abbreviation("in")] Inch = 4, /// Feet unit (ft) [Abbreviation("ft")] Feet = 5, /// Yard unit (yd) [Abbreviation("yd")] Yard = 6, /// Mile unit (mile) [Abbreviation("mile")] Mile = 7 } /// /// Class representing length convertion. /// public static class LengthConverter { // In enum order private static readonly double[] factors = new double[] { 0.001d, //millimeter 0.01d, //centimeter 1d, //meter 1000d, //kilometer 0.3048d/12d, //inch 0.3048d, //feet 0.9144d, //yard 0.3048d*5280d, //mile }; /// /// Converts the specified from unit to the specified unit. /// /// Covert from unit. /// Covert to unit. /// Covert from value. /// The converted value. public static double Convert( LengthUnit fromUnit, LengthUnit toUnit, double fromValue) { if (fromUnit == toUnit) return fromValue; double fromFactor = factors[(int)fromUnit]; double toFactor = factors[(int) toUnit]; double result = fromFactor * fromValue / toFactor; return result; } } }