public double BaseUnitValueToUnitValue(Unit unit, double value)
        {
            if (SourceDimension.Units.Contains(unit))
            {
                return(SourceDimension.BaseUnitValueToUnitValue(unit, value));
            }

            var usedDimension = targetDimensionWith(unit);
            var usedConverter = converterFor(usedDimension);

            if (usedConverter.CanResolveParameters())
            {
                return(usedDimension.BaseUnitValueToUnitValue(unit, usedConverter.ConvertToTargetBaseUnit(value)));
            }

            throw new UnableToResolveParametersException(unit, usedConverter.UnableToResolveParametersMessage);
        }
 public bool Matches(IDimension sourceDimension, IDimension targedDimension, IWithDimension withDimension)
 {
     return(SourceDimension.Equals(sourceDimension) &&
            TargetDimension.Equals(targedDimension) &&
            Converter.CanBeUsedFor(withDimension));
 }
 public int CompareTo(object obj)
 {
     return(SourceDimension.CompareTo(obj));
 }
 public int CompareTo(IDimension other)
 {
     return(SourceDimension.CompareTo(other));
 }