private string GetResult(double value, Unit unit, Unit toUnit)
        {
            var sb = new StringBuilder();

            foreach (var conversion in Units.Conversions)
            {
                if (conversion.From == unit && conversion.To == toUnit)
                {
                    var result = GetResult(value, conversion);
                    sb.Append(result);
                }
            }

            if (sb.Length == 0)
            {
                Conversion first = null;
                Conversion second = null;

                // no direct conversion, try 2-step chain
                foreach (var conversion in Units.Conversions)
                {
                    if (conversion.From == unit)
                    {
                        first = conversion;
                    }

                    if (conversion.To == toUnit)
                    {
                        second = conversion;
                    }
                }

                if (first != null && second != null && first.To == second.From)
                {
                    var composite = new Conversion(first.From, second.To, v => second.Converter(first.Converter(v)));
                    sb.Append(GetResult(value, composite));
                }
            }

            return sb.ToString();
        }
        private string GetResult(double value, Unit unit)
        {
            var sb = new StringBuilder();

            foreach (var conversion in Units.Conversions)
            {
                if (conversion.From == unit)
                {
                    var result = GetResult(value, conversion);
                    sb.Append(result);
                }
            }

            if (sb.Length == 0)
            {
                return null;
            }

            return sb.ToString();
        }
 public Conversion(Unit from, Unit to, Func<double, double> converter)
 {
     From = from;
     To = to;
     Converter = converter;
 }