diff --git a/CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs b/CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs
index 6a0c1ce018..62e799fa4b 100644
--- a/CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs
+++ b/CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs
@@ -364,36 +364,37 @@ private void GenerateStaticMethods()
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{{
- // Register in unit converter: BaseUnit -> {_quantity.Name}Unit");
+ // Register in unit converter: {_quantity.Name}Unit -> BaseUnit");
- foreach(var unit in _quantity.Units)
- {
- if (unit.SingularName == _quantity.BaseUnit)
- continue;
+ foreach(var unit in _quantity.Units)
+ {
+ if (unit.SingularName == _quantity.BaseUnit)
+ continue;
- var func = unit.FromBaseToUnitFunc.Replace("{x}", "quantity.Value");
- Writer.WL($@"
- unitConverter.SetConversionFunction<{_quantity.Name}>({_unitEnumName}.{_quantity.BaseUnit}, {_quantity.Name}Unit.{unit.SingularName}, quantity => new {_quantity.Name}({func}, {_quantity.Name}Unit.{unit.SingularName}));");
- }
- Writer.WL();
- Writer.WL($@"
+ var func = unit.FromUnitToBaseFunc.Replace("{x}", "quantity.Value");
+ Writer.WL($@"
+ unitConverter.SetConversionFunction<{_quantity.Name}>({_quantity.Name}Unit.{unit.SingularName}, {_unitEnumName}.{_quantity.BaseUnit}, quantity => quantity.ToUnit({_unitEnumName}.{_quantity.BaseUnit}));");
+ }
+
+ Writer.WL();
+ Writer.WL($@"
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction<{_quantity.Name}>({_unitEnumName}.{_quantity.BaseUnit}, {_unitEnumName}.{_quantity.BaseUnit}, quantity => quantity);
- // Register in unit converter: {_quantity.Name}Unit -> BaseUnit");
+ // Register in unit converter: BaseUnit -> {_quantity.Name}Unit");
- foreach(var unit in _quantity.Units)
- {
- if (unit.SingularName == _quantity.BaseUnit)
- continue;
+ foreach(var unit in _quantity.Units)
+ {
+ if (unit.SingularName == _quantity.BaseUnit)
+ continue;
- var func = unit.FromUnitToBaseFunc.Replace("{x}", "quantity.Value");
- Writer.WL($@"
- unitConverter.SetConversionFunction<{_quantity.Name}>({_quantity.Name}Unit.{unit.SingularName}, {_unitEnumName}.{_quantity.BaseUnit}, quantity => new {_quantity.Name}({func}, {_unitEnumName}.{_quantity.BaseUnit}));");
- }
+ var func = unit.FromBaseToUnitFunc.Replace("{x}", "quantity.Value");
+ Writer.WL($@"
+ unitConverter.SetConversionFunction<{_quantity.Name}>({_unitEnumName}.{_quantity.BaseUnit}, {_quantity.Name}Unit.{unit.SingularName}, quantity => quantity.ToUnit({_quantity.Name}Unit.{unit.SingularName}));");
+ }
- Writer.WL($@"
+ Writer.WL($@"
}}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -655,13 +656,13 @@ private void GenerateArithmeticOperators()
/// Get from adding two .
public static {_quantity.Name} operator +({_quantity.Name} left, {_quantity.Name} right)
{{
- return new {_quantity.Name}(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new {_quantity.Name}(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}}
/// Get from subtracting two .
public static {_quantity.Name} operator -({_quantity.Name} left, {_quantity.Name} right)
{{
- return new {_quantity.Name}(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new {_quantity.Name}(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}}
/// Get from multiplying value and .
@@ -711,7 +712,7 @@ private void GenerateLogarithmicArithmeticOperators()
{{
// Logarithmic addition
// Formula: {x} * log10(10^(x/{x}) + 10^(y/{x}))
- return new {_quantity.Name}({x} * Math.Log10(Math.Pow(10, left.Value/{x}) + Math.Pow(10, right.GetValueAs(left.Unit)/{x})), left.Unit);
+ return new {_quantity.Name}({x} * Math.Log10(Math.Pow(10, left.Value / {x}) + Math.Pow(10, right.ToUnit(left.Unit).Value / {x})), left.Unit);
}}
/// Get from logarithmic subtraction of two .
@@ -719,7 +720,7 @@ private void GenerateLogarithmicArithmeticOperators()
{{
// Logarithmic subtraction
// Formula: {x} * log10(10^(x/{x}) - 10^(y/{x}))
- return new {_quantity.Name}({x} * Math.Log10(Math.Pow(10, left.Value/{x}) - Math.Pow(10, right.GetValueAs(left.Unit)/{x})), left.Unit);
+ return new {_quantity.Name}({x} * Math.Log10(Math.Pow(10, left.Value / {x}) - Math.Pow(10, right.ToUnit(left.Unit).Value / {x})), left.Unit);
}}
/// Get from logarithmic multiplication of value and .
@@ -747,11 +748,11 @@ private void GenerateLogarithmicArithmeticOperators()
public static double operator /({_quantity.Name} left, {_quantity.Name} right)
{{
// Logarithmic division = subtraction
- return Convert.ToDouble(left.Value - right.GetValueAs(left.Unit));
+ return Convert.ToDouble(left.Value - right.ToUnit(left.Unit).Value);
}}
#endregion
-");
+" );
}
private void GenerateEqualityAndComparison()
@@ -762,25 +763,25 @@ private void GenerateEqualityAndComparison()
/// Returns true if less or equal to.
public static bool operator <=({_quantity.Name} left, {_quantity.Name} right)
{{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}}
/// Returns true if greater than or equal to.
public static bool operator >=({_quantity.Name} left, {_quantity.Name} right)
{{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}}
/// Returns true if less than.
public static bool operator <({_quantity.Name} left, {_quantity.Name} right)
{{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}}
/// Returns true if greater than.
public static bool operator >({_quantity.Name} left, {_quantity.Name} right)
{{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}}
/// Returns true if exactly equal.
@@ -809,7 +810,7 @@ public int CompareTo(object obj)
///
public int CompareTo({_quantity.Name} other)
{{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}}
///
@@ -826,7 +827,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals({_quantity.Name} other)
{{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}}
///
@@ -905,10 +906,10 @@ private void GenerateConversionMethods()
public double As({_unitEnumName} unit)
{{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}}
///
@@ -946,36 +947,86 @@ double IQuantity.As(Enum unit)
}}
///
- /// Converts this {_quantity.Name} to another {_quantity.Name} using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A {_quantity.Name} with the specified unit.
public {_quantity.Name} ToUnit({_unitEnumName} unit, UnitConverter unitConverter)
{{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}}
else if (unitConverter.TryGetConversionFunction((typeof({_quantity.Name}), Unit, typeof({_quantity.Name}), unit), out var conversionFunction))
{{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return ({_quantity.Name})converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return ({_quantity.Name})conversionFunction(this);
}}
else if (Unit != BaseUnit)
{{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}}
else
{{
+ // No possible conversion
throw new NotImplementedException($""Can not convert {{Unit}} to {{unit}}."");
}}
}}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit({_quantity.Name}Unit unit, out {_quantity.Name}? converted)
+ {{
+ if (_unit == unit)
+ {{
+ converted = this;
+ return true;
+ }}
+
+ converted = (_unit, unit) switch
+ {{
+ // {_quantity.Name}Unit -> BaseUnit");
+
+ foreach(var unit in _quantity.Units)
+ {
+ if (unit.SingularName == _quantity.BaseUnit)
+ continue;
+
+ var func = unit.FromUnitToBaseFunc.Replace("{x}", "_value");
+ Writer.WL($@"
+ ({_quantity.Name}Unit.{unit.SingularName}, {_unitEnumName}.{_quantity.BaseUnit}) => new {_quantity.Name}({func}, {_unitEnumName}.{_quantity.BaseUnit}),");
+ }
+
+ Writer.WL();
+ Writer.WL($@"
+
+ // BaseUnit -> {_quantity.Name}Unit");
+ foreach(var unit in _quantity.Units)
+ {
+ if (unit.SingularName == _quantity.BaseUnit)
+ continue;
+
+ var func = unit.FromBaseToUnitFunc.Replace("{x}", "_value");
+ Writer.WL($@"
+ ({_unitEnumName}.{_quantity.BaseUnit}, {_quantity.Name}Unit.{unit.SingularName}) => new {_quantity.Name}({func}, {_quantity.Name}Unit.{unit.SingularName}),");
+ }
+
+ Writer.WL();
+ Writer.WL($@"
+ _ => null!
+ }};
+
+ return converted != null;
+ }}
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{{
@@ -1009,12 +1060,6 @@ IQuantity IQuantity.ToUnit(Enum unit)
///
IQuantity<{_unitEnumName}> IQuantity<{_unitEnumName}>.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private {_valueType} GetValueAs({_unitEnumName} unit)
- {{
- var converted = ToUnit(unit);
- return ({_valueType})converted.Value;
- }}
-
#endregion
");
}
diff --git a/UnitsNet/CustomCode/Quantities/AmountOfSubstance.extra.cs b/UnitsNet/CustomCode/Quantities/AmountOfSubstance.extra.cs
index 30693f48eb..44688f7ed9 100644
--- a/UnitsNet/CustomCode/Quantities/AmountOfSubstance.extra.cs
+++ b/UnitsNet/CustomCode/Quantities/AmountOfSubstance.extra.cs
@@ -30,8 +30,8 @@ public partial struct AmountOfSubstance
/// The number of particles (atoms or molecules) in this amount of substance.
public double NumberOfParticles()
{
- var moles = GetValueAs(AmountOfSubstanceUnit.Mole);
- return AvogadroConstant * moles;
+ var moles = ToUnit(AmountOfSubstanceUnit.Mole);
+ return AvogadroConstant * moles.Value;
}
diff --git a/UnitsNet/GeneratedCode/Quantities/Acceleration.g.cs b/UnitsNet/GeneratedCode/Quantities/Acceleration.g.cs
index 2b863346b4..b5127143c4 100644
--- a/UnitsNet/GeneratedCode/Quantities/Acceleration.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/Acceleration.g.cs
@@ -280,38 +280,38 @@ public Acceleration(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AccelerationUnit
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.CentimeterPerSecondSquared, quantity => new Acceleration((quantity.Value) / 1e-2d, AccelerationUnit.CentimeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.DecimeterPerSecondSquared, quantity => new Acceleration((quantity.Value) / 1e-1d, AccelerationUnit.DecimeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.FootPerSecondSquared, quantity => new Acceleration(quantity.Value / 0.304800, AccelerationUnit.FootPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.InchPerSecondSquared, quantity => new Acceleration(quantity.Value / 0.0254, AccelerationUnit.InchPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KilometerPerSecondSquared, quantity => new Acceleration((quantity.Value) / 1e3d, AccelerationUnit.KilometerPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerHour, quantity => new Acceleration(quantity.Value / 0.5144444444444 * 3600, AccelerationUnit.KnotPerHour));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerMinute, quantity => new Acceleration(quantity.Value / 0.5144444444444 * 60, AccelerationUnit.KnotPerMinute));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerSecond, quantity => new Acceleration(quantity.Value / 0.5144444444444, AccelerationUnit.KnotPerSecond));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MicrometerPerSecondSquared, quantity => new Acceleration((quantity.Value) / 1e-6d, AccelerationUnit.MicrometerPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MillimeterPerSecondSquared, quantity => new Acceleration((quantity.Value) / 1e-3d, AccelerationUnit.MillimeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MillistandardGravity, quantity => new Acceleration((quantity.Value / 9.80665) / 1e-3d, AccelerationUnit.MillistandardGravity));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.NanometerPerSecondSquared, quantity => new Acceleration((quantity.Value) / 1e-9d, AccelerationUnit.NanometerPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.StandardGravity, quantity => new Acceleration(quantity.Value / 9.80665, AccelerationUnit.StandardGravity));
+ // Register in unit converter: AccelerationUnit -> BaseUnit
+ unitConverter.SetConversionFunction(AccelerationUnit.CentimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.DecimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.FootPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.InchPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.KilometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.KnotPerHour, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.KnotPerMinute, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.KnotPerSecond, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MicrometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MillimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MillistandardGravity, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.NanometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.StandardGravity, AccelerationUnit.MeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MeterPerSecondSquared));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => quantity);
- // Register in unit converter: AccelerationUnit -> BaseUnit
- unitConverter.SetConversionFunction(AccelerationUnit.CentimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value) * 1e-2d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.DecimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value) * 1e-1d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.FootPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration(quantity.Value * 0.304800, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.InchPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration(quantity.Value * 0.0254, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.KilometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value) * 1e3d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.KnotPerHour, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration(quantity.Value * 0.5144444444444 / 3600, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.KnotPerMinute, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration(quantity.Value * 0.5144444444444 / 60, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.KnotPerSecond, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration(quantity.Value * 0.5144444444444, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MicrometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value) * 1e-6d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MillimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value) * 1e-3d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.MillistandardGravity, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value * 9.80665) * 1e-3d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.NanometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration((quantity.Value) * 1e-9d, AccelerationUnit.MeterPerSecondSquared));
- unitConverter.SetConversionFunction(AccelerationUnit.StandardGravity, AccelerationUnit.MeterPerSecondSquared, quantity => new Acceleration(quantity.Value * 9.80665, AccelerationUnit.MeterPerSecondSquared));
+ // Register in unit converter: BaseUnit -> AccelerationUnit
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.CentimeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.CentimeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.DecimeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.DecimeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.FootPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.FootPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.InchPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.InchPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KilometerPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.KilometerPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerHour, quantity => quantity.ToUnit(AccelerationUnit.KnotPerHour));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerMinute, quantity => quantity.ToUnit(AccelerationUnit.KnotPerMinute));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerSecond, quantity => quantity.ToUnit(AccelerationUnit.KnotPerSecond));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MicrometerPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MicrometerPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MillimeterPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.MillimeterPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MillistandardGravity, quantity => quantity.ToUnit(AccelerationUnit.MillistandardGravity));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.NanometerPerSecondSquared, quantity => quantity.ToUnit(AccelerationUnit.NanometerPerSecondSquared));
+ unitConverter.SetConversionFunction(AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.StandardGravity, quantity => quantity.ToUnit(AccelerationUnit.StandardGravity));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -679,13 +679,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Accel
/// Get from adding two .
public static Acceleration operator +(Acceleration left, Acceleration right)
{
- return new Acceleration(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new Acceleration(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static Acceleration operator -(Acceleration left, Acceleration right)
{
- return new Acceleration(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new Acceleration(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -719,25 +719,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Accel
/// Returns true if less or equal to.
public static bool operator <=(Acceleration left, Acceleration right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(Acceleration left, Acceleration right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(Acceleration left, Acceleration right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(Acceleration left, Acceleration right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -766,7 +766,7 @@ public int CompareTo(object obj)
///
public int CompareTo(Acceleration other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -783,7 +783,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(Acceleration other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -857,10 +857,10 @@ public override int GetHashCode()
public double As(AccelerationUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -898,36 +898,88 @@ public Acceleration ToUnit(AccelerationUnit unit)
}
///
- /// Converts this Acceleration to another Acceleration using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A Acceleration with the specified unit.
public Acceleration ToUnit(AccelerationUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(Acceleration), Unit, typeof(Acceleration), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (Acceleration)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (Acceleration)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(AccelerationUnit unit, out Acceleration? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // AccelerationUnit -> BaseUnit
+ (AccelerationUnit.CentimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value) * 1e-2d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.DecimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value) * 1e-1d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.FootPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration(_value * 0.304800, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.InchPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration(_value * 0.0254, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.KilometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value) * 1e3d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.KnotPerHour, AccelerationUnit.MeterPerSecondSquared) => new Acceleration(_value * 0.5144444444444 / 3600, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.KnotPerMinute, AccelerationUnit.MeterPerSecondSquared) => new Acceleration(_value * 0.5144444444444 / 60, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.KnotPerSecond, AccelerationUnit.MeterPerSecondSquared) => new Acceleration(_value * 0.5144444444444, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.MicrometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value) * 1e-6d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.MillimeterPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value) * 1e-3d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.MillistandardGravity, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value * 9.80665) * 1e-3d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.NanometerPerSecondSquared, AccelerationUnit.MeterPerSecondSquared) => new Acceleration((_value) * 1e-9d, AccelerationUnit.MeterPerSecondSquared),
+ (AccelerationUnit.StandardGravity, AccelerationUnit.MeterPerSecondSquared) => new Acceleration(_value * 9.80665, AccelerationUnit.MeterPerSecondSquared),
+
+ // BaseUnit -> AccelerationUnit
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.CentimeterPerSecondSquared) => new Acceleration((_value) / 1e-2d, AccelerationUnit.CentimeterPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.DecimeterPerSecondSquared) => new Acceleration((_value) / 1e-1d, AccelerationUnit.DecimeterPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.FootPerSecondSquared) => new Acceleration(_value / 0.304800, AccelerationUnit.FootPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.InchPerSecondSquared) => new Acceleration(_value / 0.0254, AccelerationUnit.InchPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KilometerPerSecondSquared) => new Acceleration((_value) / 1e3d, AccelerationUnit.KilometerPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerHour) => new Acceleration(_value / 0.5144444444444 * 3600, AccelerationUnit.KnotPerHour),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerMinute) => new Acceleration(_value / 0.5144444444444 * 60, AccelerationUnit.KnotPerMinute),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.KnotPerSecond) => new Acceleration(_value / 0.5144444444444, AccelerationUnit.KnotPerSecond),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MicrometerPerSecondSquared) => new Acceleration((_value) / 1e-6d, AccelerationUnit.MicrometerPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MillimeterPerSecondSquared) => new Acceleration((_value) / 1e-3d, AccelerationUnit.MillimeterPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.MillistandardGravity) => new Acceleration((_value / 9.80665) / 1e-3d, AccelerationUnit.MillistandardGravity),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.NanometerPerSecondSquared) => new Acceleration((_value) / 1e-9d, AccelerationUnit.NanometerPerSecondSquared),
+ (AccelerationUnit.MeterPerSecondSquared, AccelerationUnit.StandardGravity) => new Acceleration(_value / 9.80665, AccelerationUnit.StandardGravity),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -961,12 +1013,6 @@ public Acceleration ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(AccelerationUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.g.cs b/UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.g.cs
index 8e2b9773a6..ec906efd1c 100644
--- a/UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.g.cs
@@ -286,40 +286,40 @@ public AmountOfSubstance(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AmountOfSubstanceUnit
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Centimole, quantity => new AmountOfSubstance((quantity.Value) / 1e-2d, AmountOfSubstanceUnit.Centimole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.CentipoundMole, quantity => new AmountOfSubstance((quantity.Value / 453.59237) / 1e-2d, AmountOfSubstanceUnit.CentipoundMole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Decimole, quantity => new AmountOfSubstance((quantity.Value) / 1e-1d, AmountOfSubstanceUnit.Decimole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.DecipoundMole, quantity => new AmountOfSubstance((quantity.Value / 453.59237) / 1e-1d, AmountOfSubstanceUnit.DecipoundMole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Kilomole, quantity => new AmountOfSubstance((quantity.Value) / 1e3d, AmountOfSubstanceUnit.Kilomole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.KilopoundMole, quantity => new AmountOfSubstance((quantity.Value / 453.59237) / 1e3d, AmountOfSubstanceUnit.KilopoundMole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Megamole, quantity => new AmountOfSubstance((quantity.Value) / 1e6d, AmountOfSubstanceUnit.Megamole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Micromole, quantity => new AmountOfSubstance((quantity.Value) / 1e-6d, AmountOfSubstanceUnit.Micromole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.MicropoundMole, quantity => new AmountOfSubstance((quantity.Value / 453.59237) / 1e-6d, AmountOfSubstanceUnit.MicropoundMole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Millimole, quantity => new AmountOfSubstance((quantity.Value) / 1e-3d, AmountOfSubstanceUnit.Millimole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.MillipoundMole, quantity => new AmountOfSubstance((quantity.Value / 453.59237) / 1e-3d, AmountOfSubstanceUnit.MillipoundMole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Nanomole, quantity => new AmountOfSubstance((quantity.Value) / 1e-9d, AmountOfSubstanceUnit.Nanomole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.NanopoundMole, quantity => new AmountOfSubstance((quantity.Value / 453.59237) / 1e-9d, AmountOfSubstanceUnit.NanopoundMole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.PoundMole, quantity => new AmountOfSubstance(quantity.Value / 453.59237, AmountOfSubstanceUnit.PoundMole));
+ // Register in unit converter: AmountOfSubstanceUnit -> BaseUnit
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Centimole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.CentipoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Decimole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.DecipoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Kilomole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.KilopoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Megamole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Micromole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.MicropoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Millimole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.MillipoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Nanomole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.NanopoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.PoundMole, AmountOfSubstanceUnit.Mole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Mole));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Mole, quantity => quantity);
- // Register in unit converter: AmountOfSubstanceUnit -> BaseUnit
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Centimole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e-2d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.CentipoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value * 453.59237) * 1e-2d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Decimole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e-1d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.DecipoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value * 453.59237) * 1e-1d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Kilomole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e3d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.KilopoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value * 453.59237) * 1e3d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Megamole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e6d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Micromole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e-6d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.MicropoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value * 453.59237) * 1e-6d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Millimole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e-3d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.MillipoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value * 453.59237) * 1e-3d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Nanomole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value) * 1e-9d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.NanopoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance((quantity.Value * 453.59237) * 1e-9d, AmountOfSubstanceUnit.Mole));
- unitConverter.SetConversionFunction(AmountOfSubstanceUnit.PoundMole, AmountOfSubstanceUnit.Mole, quantity => new AmountOfSubstance(quantity.Value * 453.59237, AmountOfSubstanceUnit.Mole));
+ // Register in unit converter: BaseUnit -> AmountOfSubstanceUnit
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Centimole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Centimole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.CentipoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.CentipoundMole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Decimole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Decimole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.DecipoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.DecipoundMole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Kilomole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Kilomole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.KilopoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.KilopoundMole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Megamole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Megamole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Micromole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Micromole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.MicropoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.MicropoundMole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Millimole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Millimole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.MillipoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.MillipoundMole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Nanomole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.Nanomole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.NanopoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.NanopoundMole));
+ unitConverter.SetConversionFunction(AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.PoundMole, quantity => quantity.ToUnit(AmountOfSubstanceUnit.PoundMole));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -684,13 +684,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Amoun
/// Get from adding two .
public static AmountOfSubstance operator +(AmountOfSubstance left, AmountOfSubstance right)
{
- return new AmountOfSubstance(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new AmountOfSubstance(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static AmountOfSubstance operator -(AmountOfSubstance left, AmountOfSubstance right)
{
- return new AmountOfSubstance(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new AmountOfSubstance(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -724,25 +724,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Amoun
/// Returns true if less or equal to.
public static bool operator <=(AmountOfSubstance left, AmountOfSubstance right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(AmountOfSubstance left, AmountOfSubstance right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(AmountOfSubstance left, AmountOfSubstance right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(AmountOfSubstance left, AmountOfSubstance right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -771,7 +771,7 @@ public int CompareTo(object obj)
///
public int CompareTo(AmountOfSubstance other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -788,7 +788,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(AmountOfSubstance other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -862,10 +862,10 @@ public override int GetHashCode()
public double As(AmountOfSubstanceUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -903,36 +903,90 @@ public AmountOfSubstance ToUnit(AmountOfSubstanceUnit unit)
}
///
- /// Converts this AmountOfSubstance to another AmountOfSubstance using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A AmountOfSubstance with the specified unit.
public AmountOfSubstance ToUnit(AmountOfSubstanceUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(AmountOfSubstance), Unit, typeof(AmountOfSubstance), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (AmountOfSubstance)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (AmountOfSubstance)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(AmountOfSubstanceUnit unit, out AmountOfSubstance? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // AmountOfSubstanceUnit -> BaseUnit
+ (AmountOfSubstanceUnit.Centimole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e-2d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.CentipoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value * 453.59237) * 1e-2d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.Decimole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e-1d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.DecipoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value * 453.59237) * 1e-1d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.Kilomole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e3d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.KilopoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value * 453.59237) * 1e3d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.Megamole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e6d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.Micromole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e-6d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.MicropoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value * 453.59237) * 1e-6d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.Millimole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e-3d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.MillipoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value * 453.59237) * 1e-3d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.Nanomole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value) * 1e-9d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.NanopoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance((_value * 453.59237) * 1e-9d, AmountOfSubstanceUnit.Mole),
+ (AmountOfSubstanceUnit.PoundMole, AmountOfSubstanceUnit.Mole) => new AmountOfSubstance(_value * 453.59237, AmountOfSubstanceUnit.Mole),
+
+ // BaseUnit -> AmountOfSubstanceUnit
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Centimole) => new AmountOfSubstance((_value) / 1e-2d, AmountOfSubstanceUnit.Centimole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.CentipoundMole) => new AmountOfSubstance((_value / 453.59237) / 1e-2d, AmountOfSubstanceUnit.CentipoundMole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Decimole) => new AmountOfSubstance((_value) / 1e-1d, AmountOfSubstanceUnit.Decimole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.DecipoundMole) => new AmountOfSubstance((_value / 453.59237) / 1e-1d, AmountOfSubstanceUnit.DecipoundMole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Kilomole) => new AmountOfSubstance((_value) / 1e3d, AmountOfSubstanceUnit.Kilomole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.KilopoundMole) => new AmountOfSubstance((_value / 453.59237) / 1e3d, AmountOfSubstanceUnit.KilopoundMole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Megamole) => new AmountOfSubstance((_value) / 1e6d, AmountOfSubstanceUnit.Megamole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Micromole) => new AmountOfSubstance((_value) / 1e-6d, AmountOfSubstanceUnit.Micromole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.MicropoundMole) => new AmountOfSubstance((_value / 453.59237) / 1e-6d, AmountOfSubstanceUnit.MicropoundMole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Millimole) => new AmountOfSubstance((_value) / 1e-3d, AmountOfSubstanceUnit.Millimole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.MillipoundMole) => new AmountOfSubstance((_value / 453.59237) / 1e-3d, AmountOfSubstanceUnit.MillipoundMole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.Nanomole) => new AmountOfSubstance((_value) / 1e-9d, AmountOfSubstanceUnit.Nanomole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.NanopoundMole) => new AmountOfSubstance((_value / 453.59237) / 1e-9d, AmountOfSubstanceUnit.NanopoundMole),
+ (AmountOfSubstanceUnit.Mole, AmountOfSubstanceUnit.PoundMole) => new AmountOfSubstance(_value / 453.59237, AmountOfSubstanceUnit.PoundMole),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -966,12 +1020,6 @@ public AmountOfSubstance ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(AmountOfSubstanceUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.g.cs b/UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.g.cs
index 321661df0e..fef047de79 100644
--- a/UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.g.cs
@@ -220,18 +220,18 @@ public AmplitudeRatio(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AmplitudeRatioUnit
- unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelMicrovolt, quantity => new AmplitudeRatio(quantity.Value + 120, AmplitudeRatioUnit.DecibelMicrovolt));
- unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelMillivolt, quantity => new AmplitudeRatio(quantity.Value + 60, AmplitudeRatioUnit.DecibelMillivolt));
- unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelUnloaded, quantity => new AmplitudeRatio(quantity.Value + 2.218487499, AmplitudeRatioUnit.DecibelUnloaded));
+ // Register in unit converter: AmplitudeRatioUnit -> BaseUnit
+ unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelMicrovolt, AmplitudeRatioUnit.DecibelVolt, quantity => quantity.ToUnit(AmplitudeRatioUnit.DecibelVolt));
+ unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelMillivolt, AmplitudeRatioUnit.DecibelVolt, quantity => quantity.ToUnit(AmplitudeRatioUnit.DecibelVolt));
+ unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelUnloaded, AmplitudeRatioUnit.DecibelVolt, quantity => quantity.ToUnit(AmplitudeRatioUnit.DecibelVolt));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelVolt, quantity => quantity);
- // Register in unit converter: AmplitudeRatioUnit -> BaseUnit
- unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelMicrovolt, AmplitudeRatioUnit.DecibelVolt, quantity => new AmplitudeRatio(quantity.Value - 120, AmplitudeRatioUnit.DecibelVolt));
- unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelMillivolt, AmplitudeRatioUnit.DecibelVolt, quantity => new AmplitudeRatio(quantity.Value - 60, AmplitudeRatioUnit.DecibelVolt));
- unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelUnloaded, AmplitudeRatioUnit.DecibelVolt, quantity => new AmplitudeRatio(quantity.Value - 2.218487499, AmplitudeRatioUnit.DecibelVolt));
+ // Register in unit converter: BaseUnit -> AmplitudeRatioUnit
+ unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelMicrovolt, quantity => quantity.ToUnit(AmplitudeRatioUnit.DecibelMicrovolt));
+ unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelMillivolt, quantity => quantity.ToUnit(AmplitudeRatioUnit.DecibelMillivolt));
+ unitConverter.SetConversionFunction(AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelUnloaded, quantity => quantity.ToUnit(AmplitudeRatioUnit.DecibelUnloaded));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -477,7 +477,7 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Ampli
{
// Logarithmic addition
// Formula: 20 * log10(10^(x/20) + 10^(y/20))
- return new AmplitudeRatio(20 * Math.Log10(Math.Pow(10, left.Value/20) + Math.Pow(10, right.GetValueAs(left.Unit)/20)), left.Unit);
+ return new AmplitudeRatio(20 * Math.Log10(Math.Pow(10, left.Value / 20) + Math.Pow(10, right.ToUnit(left.Unit).Value / 20)), left.Unit);
}
/// Get from logarithmic subtraction of two .
@@ -485,7 +485,7 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Ampli
{
// Logarithmic subtraction
// Formula: 20 * log10(10^(x/20) - 10^(y/20))
- return new AmplitudeRatio(20 * Math.Log10(Math.Pow(10, left.Value/20) - Math.Pow(10, right.GetValueAs(left.Unit)/20)), left.Unit);
+ return new AmplitudeRatio(20 * Math.Log10(Math.Pow(10, left.Value / 20) - Math.Pow(10, right.ToUnit(left.Unit).Value / 20)), left.Unit);
}
/// Get from logarithmic multiplication of value and .
@@ -513,7 +513,7 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Ampli
public static double operator /(AmplitudeRatio left, AmplitudeRatio right)
{
// Logarithmic division = subtraction
- return Convert.ToDouble(left.Value - right.GetValueAs(left.Unit));
+ return Convert.ToDouble(left.Value - right.ToUnit(left.Unit).Value);
}
#endregion
@@ -523,25 +523,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Ampli
/// Returns true if less or equal to.
public static bool operator <=(AmplitudeRatio left, AmplitudeRatio right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(AmplitudeRatio left, AmplitudeRatio right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(AmplitudeRatio left, AmplitudeRatio right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(AmplitudeRatio left, AmplitudeRatio right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -570,7 +570,7 @@ public int CompareTo(object obj)
///
public int CompareTo(AmplitudeRatio other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -587,7 +587,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(AmplitudeRatio other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -661,10 +661,10 @@ public override int GetHashCode()
public double As(AmplitudeRatioUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -702,36 +702,68 @@ public AmplitudeRatio ToUnit(AmplitudeRatioUnit unit)
}
///
- /// Converts this AmplitudeRatio to another AmplitudeRatio using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A AmplitudeRatio with the specified unit.
public AmplitudeRatio ToUnit(AmplitudeRatioUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(AmplitudeRatio), Unit, typeof(AmplitudeRatio), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (AmplitudeRatio)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (AmplitudeRatio)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(AmplitudeRatioUnit unit, out AmplitudeRatio? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // AmplitudeRatioUnit -> BaseUnit
+ (AmplitudeRatioUnit.DecibelMicrovolt, AmplitudeRatioUnit.DecibelVolt) => new AmplitudeRatio(_value - 120, AmplitudeRatioUnit.DecibelVolt),
+ (AmplitudeRatioUnit.DecibelMillivolt, AmplitudeRatioUnit.DecibelVolt) => new AmplitudeRatio(_value - 60, AmplitudeRatioUnit.DecibelVolt),
+ (AmplitudeRatioUnit.DecibelUnloaded, AmplitudeRatioUnit.DecibelVolt) => new AmplitudeRatio(_value - 2.218487499, AmplitudeRatioUnit.DecibelVolt),
+
+ // BaseUnit -> AmplitudeRatioUnit
+ (AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelMicrovolt) => new AmplitudeRatio(_value + 120, AmplitudeRatioUnit.DecibelMicrovolt),
+ (AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelMillivolt) => new AmplitudeRatio(_value + 60, AmplitudeRatioUnit.DecibelMillivolt),
+ (AmplitudeRatioUnit.DecibelVolt, AmplitudeRatioUnit.DecibelUnloaded) => new AmplitudeRatio(_value + 2.218487499, AmplitudeRatioUnit.DecibelUnloaded),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -765,12 +797,6 @@ public AmplitudeRatio ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(AmplitudeRatioUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/Angle.g.cs b/UnitsNet/GeneratedCode/Quantities/Angle.g.cs
index 98d8a0c7d7..437d98f229 100644
--- a/UnitsNet/GeneratedCode/Quantities/Angle.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/Angle.g.cs
@@ -292,42 +292,42 @@ public Angle(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AngleUnit
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Arcminute, quantity => new Angle(quantity.Value * 60, AngleUnit.Arcminute));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Arcsecond, quantity => new Angle(quantity.Value * 3600, AngleUnit.Arcsecond));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Centiradian, quantity => new Angle((quantity.Value / 180 * Math.PI) / 1e-2d, AngleUnit.Centiradian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Deciradian, quantity => new Angle((quantity.Value / 180 * Math.PI) / 1e-1d, AngleUnit.Deciradian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Gradian, quantity => new Angle(quantity.Value / 0.9, AngleUnit.Gradian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Microdegree, quantity => new Angle((quantity.Value) / 1e-6d, AngleUnit.Microdegree));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Microradian, quantity => new Angle((quantity.Value / 180 * Math.PI) / 1e-6d, AngleUnit.Microradian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Millidegree, quantity => new Angle((quantity.Value) / 1e-3d, AngleUnit.Millidegree));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Milliradian, quantity => new Angle((quantity.Value / 180 * Math.PI) / 1e-3d, AngleUnit.Milliradian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Nanodegree, quantity => new Angle((quantity.Value) / 1e-9d, AngleUnit.Nanodegree));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Nanoradian, quantity => new Angle((quantity.Value / 180 * Math.PI) / 1e-9d, AngleUnit.Nanoradian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.NatoMil, quantity => new Angle(quantity.Value * 160 / 9, AngleUnit.NatoMil));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Radian, quantity => new Angle(quantity.Value / 180 * Math.PI, AngleUnit.Radian));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Revolution, quantity => new Angle(quantity.Value / 360, AngleUnit.Revolution));
- unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Tilt, quantity => new Angle(Math.Sin(quantity.Value / 180 * Math.PI), AngleUnit.Tilt));
+ // Register in unit converter: AngleUnit -> BaseUnit
+ unitConverter.SetConversionFunction(AngleUnit.Arcminute, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Arcsecond, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Centiradian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Deciradian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Gradian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Microdegree, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Microradian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Millidegree, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Milliradian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Nanodegree, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Nanoradian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.NatoMil, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Radian, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Revolution, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
+ unitConverter.SetConversionFunction(AngleUnit.Tilt, AngleUnit.Degree, quantity => quantity.ToUnit(AngleUnit.Degree));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Degree, quantity => quantity);
- // Register in unit converter: AngleUnit -> BaseUnit
- unitConverter.SetConversionFunction(AngleUnit.Arcminute, AngleUnit.Degree, quantity => new Angle(quantity.Value / 60, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Arcsecond, AngleUnit.Degree, quantity => new Angle(quantity.Value / 3600, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Centiradian, AngleUnit.Degree, quantity => new Angle((quantity.Value * 180 / Math.PI) * 1e-2d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Deciradian, AngleUnit.Degree, quantity => new Angle((quantity.Value * 180 / Math.PI) * 1e-1d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Gradian, AngleUnit.Degree, quantity => new Angle(quantity.Value * 0.9, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Microdegree, AngleUnit.Degree, quantity => new Angle((quantity.Value) * 1e-6d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Microradian, AngleUnit.Degree, quantity => new Angle((quantity.Value * 180 / Math.PI) * 1e-6d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Millidegree, AngleUnit.Degree, quantity => new Angle((quantity.Value) * 1e-3d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Milliradian, AngleUnit.Degree, quantity => new Angle((quantity.Value * 180 / Math.PI) * 1e-3d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Nanodegree, AngleUnit.Degree, quantity => new Angle((quantity.Value) * 1e-9d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Nanoradian, AngleUnit.Degree, quantity => new Angle((quantity.Value * 180 / Math.PI) * 1e-9d, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.NatoMil, AngleUnit.Degree, quantity => new Angle(quantity.Value * 9 / 160, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Radian, AngleUnit.Degree, quantity => new Angle(quantity.Value * 180 / Math.PI, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Revolution, AngleUnit.Degree, quantity => new Angle(quantity.Value * 360, AngleUnit.Degree));
- unitConverter.SetConversionFunction(AngleUnit.Tilt, AngleUnit.Degree, quantity => new Angle(Math.Asin(quantity.Value) * 180 / Math.PI, AngleUnit.Degree));
+ // Register in unit converter: BaseUnit -> AngleUnit
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Arcminute, quantity => quantity.ToUnit(AngleUnit.Arcminute));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Arcsecond, quantity => quantity.ToUnit(AngleUnit.Arcsecond));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Centiradian, quantity => quantity.ToUnit(AngleUnit.Centiradian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Deciradian, quantity => quantity.ToUnit(AngleUnit.Deciradian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Gradian, quantity => quantity.ToUnit(AngleUnit.Gradian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Microdegree, quantity => quantity.ToUnit(AngleUnit.Microdegree));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Microradian, quantity => quantity.ToUnit(AngleUnit.Microradian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Millidegree, quantity => quantity.ToUnit(AngleUnit.Millidegree));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Milliradian, quantity => quantity.ToUnit(AngleUnit.Milliradian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Nanodegree, quantity => quantity.ToUnit(AngleUnit.Nanodegree));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Nanoradian, quantity => quantity.ToUnit(AngleUnit.Nanoradian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.NatoMil, quantity => quantity.ToUnit(AngleUnit.NatoMil));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Radian, quantity => quantity.ToUnit(AngleUnit.Radian));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Revolution, quantity => quantity.ToUnit(AngleUnit.Revolution));
+ unitConverter.SetConversionFunction(AngleUnit.Degree, AngleUnit.Tilt, quantity => quantity.ToUnit(AngleUnit.Tilt));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -715,13 +715,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Angle
/// Get from adding two .
public static Angle operator +(Angle left, Angle right)
{
- return new Angle(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new Angle(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static Angle operator -(Angle left, Angle right)
{
- return new Angle(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new Angle(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -755,25 +755,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Angle
/// Returns true if less or equal to.
public static bool operator <=(Angle left, Angle right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(Angle left, Angle right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(Angle left, Angle right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(Angle left, Angle right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -802,7 +802,7 @@ public int CompareTo(object obj)
///
public int CompareTo(Angle other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -819,7 +819,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(Angle other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -893,10 +893,10 @@ public override int GetHashCode()
public double As(AngleUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -934,36 +934,92 @@ public Angle ToUnit(AngleUnit unit)
}
///
- /// Converts this Angle to another Angle using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A Angle with the specified unit.
public Angle ToUnit(AngleUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(Angle), Unit, typeof(Angle), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (Angle)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (Angle)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(AngleUnit unit, out Angle? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // AngleUnit -> BaseUnit
+ (AngleUnit.Arcminute, AngleUnit.Degree) => new Angle(_value / 60, AngleUnit.Degree),
+ (AngleUnit.Arcsecond, AngleUnit.Degree) => new Angle(_value / 3600, AngleUnit.Degree),
+ (AngleUnit.Centiradian, AngleUnit.Degree) => new Angle((_value * 180 / Math.PI) * 1e-2d, AngleUnit.Degree),
+ (AngleUnit.Deciradian, AngleUnit.Degree) => new Angle((_value * 180 / Math.PI) * 1e-1d, AngleUnit.Degree),
+ (AngleUnit.Gradian, AngleUnit.Degree) => new Angle(_value * 0.9, AngleUnit.Degree),
+ (AngleUnit.Microdegree, AngleUnit.Degree) => new Angle((_value) * 1e-6d, AngleUnit.Degree),
+ (AngleUnit.Microradian, AngleUnit.Degree) => new Angle((_value * 180 / Math.PI) * 1e-6d, AngleUnit.Degree),
+ (AngleUnit.Millidegree, AngleUnit.Degree) => new Angle((_value) * 1e-3d, AngleUnit.Degree),
+ (AngleUnit.Milliradian, AngleUnit.Degree) => new Angle((_value * 180 / Math.PI) * 1e-3d, AngleUnit.Degree),
+ (AngleUnit.Nanodegree, AngleUnit.Degree) => new Angle((_value) * 1e-9d, AngleUnit.Degree),
+ (AngleUnit.Nanoradian, AngleUnit.Degree) => new Angle((_value * 180 / Math.PI) * 1e-9d, AngleUnit.Degree),
+ (AngleUnit.NatoMil, AngleUnit.Degree) => new Angle(_value * 9 / 160, AngleUnit.Degree),
+ (AngleUnit.Radian, AngleUnit.Degree) => new Angle(_value * 180 / Math.PI, AngleUnit.Degree),
+ (AngleUnit.Revolution, AngleUnit.Degree) => new Angle(_value * 360, AngleUnit.Degree),
+ (AngleUnit.Tilt, AngleUnit.Degree) => new Angle(Math.Asin(_value) * 180 / Math.PI, AngleUnit.Degree),
+
+ // BaseUnit -> AngleUnit
+ (AngleUnit.Degree, AngleUnit.Arcminute) => new Angle(_value * 60, AngleUnit.Arcminute),
+ (AngleUnit.Degree, AngleUnit.Arcsecond) => new Angle(_value * 3600, AngleUnit.Arcsecond),
+ (AngleUnit.Degree, AngleUnit.Centiradian) => new Angle((_value / 180 * Math.PI) / 1e-2d, AngleUnit.Centiradian),
+ (AngleUnit.Degree, AngleUnit.Deciradian) => new Angle((_value / 180 * Math.PI) / 1e-1d, AngleUnit.Deciradian),
+ (AngleUnit.Degree, AngleUnit.Gradian) => new Angle(_value / 0.9, AngleUnit.Gradian),
+ (AngleUnit.Degree, AngleUnit.Microdegree) => new Angle((_value) / 1e-6d, AngleUnit.Microdegree),
+ (AngleUnit.Degree, AngleUnit.Microradian) => new Angle((_value / 180 * Math.PI) / 1e-6d, AngleUnit.Microradian),
+ (AngleUnit.Degree, AngleUnit.Millidegree) => new Angle((_value) / 1e-3d, AngleUnit.Millidegree),
+ (AngleUnit.Degree, AngleUnit.Milliradian) => new Angle((_value / 180 * Math.PI) / 1e-3d, AngleUnit.Milliradian),
+ (AngleUnit.Degree, AngleUnit.Nanodegree) => new Angle((_value) / 1e-9d, AngleUnit.Nanodegree),
+ (AngleUnit.Degree, AngleUnit.Nanoradian) => new Angle((_value / 180 * Math.PI) / 1e-9d, AngleUnit.Nanoradian),
+ (AngleUnit.Degree, AngleUnit.NatoMil) => new Angle(_value * 160 / 9, AngleUnit.NatoMil),
+ (AngleUnit.Degree, AngleUnit.Radian) => new Angle(_value / 180 * Math.PI, AngleUnit.Radian),
+ (AngleUnit.Degree, AngleUnit.Revolution) => new Angle(_value / 360, AngleUnit.Revolution),
+ (AngleUnit.Degree, AngleUnit.Tilt) => new Angle(Math.Sin(_value / 180 * Math.PI), AngleUnit.Tilt),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -997,12 +1053,6 @@ public Angle ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(AngleUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/ApparentEnergy.g.cs b/UnitsNet/GeneratedCode/Quantities/ApparentEnergy.g.cs
index 05bdfde19b..45b5e69744 100644
--- a/UnitsNet/GeneratedCode/Quantities/ApparentEnergy.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/ApparentEnergy.g.cs
@@ -214,16 +214,16 @@ public ApparentEnergy(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> ApparentEnergyUnit
- unitConverter.SetConversionFunction(ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.KilovoltampereHour, quantity => new ApparentEnergy((quantity.Value) / 1e3d, ApparentEnergyUnit.KilovoltampereHour));
- unitConverter.SetConversionFunction(ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.MegavoltampereHour, quantity => new ApparentEnergy((quantity.Value) / 1e6d, ApparentEnergyUnit.MegavoltampereHour));
+ // Register in unit converter: ApparentEnergyUnit -> BaseUnit
+ unitConverter.SetConversionFunction(ApparentEnergyUnit.KilovoltampereHour, ApparentEnergyUnit.VoltampereHour, quantity => quantity.ToUnit(ApparentEnergyUnit.VoltampereHour));
+ unitConverter.SetConversionFunction(ApparentEnergyUnit.MegavoltampereHour, ApparentEnergyUnit.VoltampereHour, quantity => quantity.ToUnit(ApparentEnergyUnit.VoltampereHour));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.VoltampereHour, quantity => quantity);
- // Register in unit converter: ApparentEnergyUnit -> BaseUnit
- unitConverter.SetConversionFunction(ApparentEnergyUnit.KilovoltampereHour, ApparentEnergyUnit.VoltampereHour, quantity => new ApparentEnergy((quantity.Value) * 1e3d, ApparentEnergyUnit.VoltampereHour));
- unitConverter.SetConversionFunction(ApparentEnergyUnit.MegavoltampereHour, ApparentEnergyUnit.VoltampereHour, quantity => new ApparentEnergy((quantity.Value) * 1e6d, ApparentEnergyUnit.VoltampereHour));
+ // Register in unit converter: BaseUnit -> ApparentEnergyUnit
+ unitConverter.SetConversionFunction(ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.KilovoltampereHour, quantity => quantity.ToUnit(ApparentEnergyUnit.KilovoltampereHour));
+ unitConverter.SetConversionFunction(ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.MegavoltampereHour, quantity => quantity.ToUnit(ApparentEnergyUnit.MegavoltampereHour));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -456,13 +456,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Appar
/// Get from adding two .
public static ApparentEnergy operator +(ApparentEnergy left, ApparentEnergy right)
{
- return new ApparentEnergy(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new ApparentEnergy(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static ApparentEnergy operator -(ApparentEnergy left, ApparentEnergy right)
{
- return new ApparentEnergy(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new ApparentEnergy(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -496,25 +496,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Appar
/// Returns true if less or equal to.
public static bool operator <=(ApparentEnergy left, ApparentEnergy right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(ApparentEnergy left, ApparentEnergy right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(ApparentEnergy left, ApparentEnergy right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(ApparentEnergy left, ApparentEnergy right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -543,7 +543,7 @@ public int CompareTo(object obj)
///
public int CompareTo(ApparentEnergy other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -560,7 +560,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(ApparentEnergy other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -634,10 +634,10 @@ public override int GetHashCode()
public double As(ApparentEnergyUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -675,36 +675,66 @@ public ApparentEnergy ToUnit(ApparentEnergyUnit unit)
}
///
- /// Converts this ApparentEnergy to another ApparentEnergy using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A ApparentEnergy with the specified unit.
public ApparentEnergy ToUnit(ApparentEnergyUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(ApparentEnergy), Unit, typeof(ApparentEnergy), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (ApparentEnergy)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (ApparentEnergy)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(ApparentEnergyUnit unit, out ApparentEnergy? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // ApparentEnergyUnit -> BaseUnit
+ (ApparentEnergyUnit.KilovoltampereHour, ApparentEnergyUnit.VoltampereHour) => new ApparentEnergy((_value) * 1e3d, ApparentEnergyUnit.VoltampereHour),
+ (ApparentEnergyUnit.MegavoltampereHour, ApparentEnergyUnit.VoltampereHour) => new ApparentEnergy((_value) * 1e6d, ApparentEnergyUnit.VoltampereHour),
+
+ // BaseUnit -> ApparentEnergyUnit
+ (ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.KilovoltampereHour) => new ApparentEnergy((_value) / 1e3d, ApparentEnergyUnit.KilovoltampereHour),
+ (ApparentEnergyUnit.VoltampereHour, ApparentEnergyUnit.MegavoltampereHour) => new ApparentEnergy((_value) / 1e6d, ApparentEnergyUnit.MegavoltampereHour),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -738,12 +768,6 @@ public ApparentEnergy ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(ApparentEnergyUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/ApparentPower.g.cs b/UnitsNet/GeneratedCode/Quantities/ApparentPower.g.cs
index 50ed9c38d0..8c9160115f 100644
--- a/UnitsNet/GeneratedCode/Quantities/ApparentPower.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/ApparentPower.g.cs
@@ -220,18 +220,18 @@ public ApparentPower(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> ApparentPowerUnit
- unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Gigavoltampere, quantity => new ApparentPower((quantity.Value) / 1e9d, ApparentPowerUnit.Gigavoltampere));
- unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Kilovoltampere, quantity => new ApparentPower((quantity.Value) / 1e3d, ApparentPowerUnit.Kilovoltampere));
- unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Megavoltampere, quantity => new ApparentPower((quantity.Value) / 1e6d, ApparentPowerUnit.Megavoltampere));
+ // Register in unit converter: ApparentPowerUnit -> BaseUnit
+ unitConverter.SetConversionFunction(ApparentPowerUnit.Gigavoltampere, ApparentPowerUnit.Voltampere, quantity => quantity.ToUnit(ApparentPowerUnit.Voltampere));
+ unitConverter.SetConversionFunction(ApparentPowerUnit.Kilovoltampere, ApparentPowerUnit.Voltampere, quantity => quantity.ToUnit(ApparentPowerUnit.Voltampere));
+ unitConverter.SetConversionFunction(ApparentPowerUnit.Megavoltampere, ApparentPowerUnit.Voltampere, quantity => quantity.ToUnit(ApparentPowerUnit.Voltampere));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Voltampere, quantity => quantity);
- // Register in unit converter: ApparentPowerUnit -> BaseUnit
- unitConverter.SetConversionFunction(ApparentPowerUnit.Gigavoltampere, ApparentPowerUnit.Voltampere, quantity => new ApparentPower((quantity.Value) * 1e9d, ApparentPowerUnit.Voltampere));
- unitConverter.SetConversionFunction(ApparentPowerUnit.Kilovoltampere, ApparentPowerUnit.Voltampere, quantity => new ApparentPower((quantity.Value) * 1e3d, ApparentPowerUnit.Voltampere));
- unitConverter.SetConversionFunction(ApparentPowerUnit.Megavoltampere, ApparentPowerUnit.Voltampere, quantity => new ApparentPower((quantity.Value) * 1e6d, ApparentPowerUnit.Voltampere));
+ // Register in unit converter: BaseUnit -> ApparentPowerUnit
+ unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Gigavoltampere, quantity => quantity.ToUnit(ApparentPowerUnit.Gigavoltampere));
+ unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Kilovoltampere, quantity => quantity.ToUnit(ApparentPowerUnit.Kilovoltampere));
+ unitConverter.SetConversionFunction(ApparentPowerUnit.Voltampere, ApparentPowerUnit.Megavoltampere, quantity => quantity.ToUnit(ApparentPowerUnit.Megavoltampere));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -475,13 +475,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Appar
/// Get from adding two .
public static ApparentPower operator +(ApparentPower left, ApparentPower right)
{
- return new ApparentPower(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new ApparentPower(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static ApparentPower operator -(ApparentPower left, ApparentPower right)
{
- return new ApparentPower(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new ApparentPower(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -515,25 +515,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out Appar
/// Returns true if less or equal to.
public static bool operator <=(ApparentPower left, ApparentPower right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(ApparentPower left, ApparentPower right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(ApparentPower left, ApparentPower right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(ApparentPower left, ApparentPower right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -562,7 +562,7 @@ public int CompareTo(object obj)
///
public int CompareTo(ApparentPower other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -579,7 +579,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(ApparentPower other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -653,10 +653,10 @@ public override int GetHashCode()
public double As(ApparentPowerUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -694,36 +694,68 @@ public ApparentPower ToUnit(ApparentPowerUnit unit)
}
///
- /// Converts this ApparentPower to another ApparentPower using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A ApparentPower with the specified unit.
public ApparentPower ToUnit(ApparentPowerUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(ApparentPower), Unit, typeof(ApparentPower), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (ApparentPower)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (ApparentPower)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(ApparentPowerUnit unit, out ApparentPower? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // ApparentPowerUnit -> BaseUnit
+ (ApparentPowerUnit.Gigavoltampere, ApparentPowerUnit.Voltampere) => new ApparentPower((_value) * 1e9d, ApparentPowerUnit.Voltampere),
+ (ApparentPowerUnit.Kilovoltampere, ApparentPowerUnit.Voltampere) => new ApparentPower((_value) * 1e3d, ApparentPowerUnit.Voltampere),
+ (ApparentPowerUnit.Megavoltampere, ApparentPowerUnit.Voltampere) => new ApparentPower((_value) * 1e6d, ApparentPowerUnit.Voltampere),
+
+ // BaseUnit -> ApparentPowerUnit
+ (ApparentPowerUnit.Voltampere, ApparentPowerUnit.Gigavoltampere) => new ApparentPower((_value) / 1e9d, ApparentPowerUnit.Gigavoltampere),
+ (ApparentPowerUnit.Voltampere, ApparentPowerUnit.Kilovoltampere) => new ApparentPower((_value) / 1e3d, ApparentPowerUnit.Kilovoltampere),
+ (ApparentPowerUnit.Voltampere, ApparentPowerUnit.Megavoltampere) => new ApparentPower((_value) / 1e6d, ApparentPowerUnit.Megavoltampere),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -757,12 +789,6 @@ public ApparentPower ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(ApparentPowerUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/Area.g.cs b/UnitsNet/GeneratedCode/Quantities/Area.g.cs
index f7ae210eca..d610c0518e 100644
--- a/UnitsNet/GeneratedCode/Quantities/Area.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/Area.g.cs
@@ -280,38 +280,38 @@ public Area(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AreaUnit
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.Acre, quantity => new Area(quantity.Value / 4046.85642, AreaUnit.Acre));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.Hectare, quantity => new Area(quantity.Value / 1e4, AreaUnit.Hectare));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareCentimeter, quantity => new Area(quantity.Value / 1e-4, AreaUnit.SquareCentimeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareDecimeter, quantity => new Area(quantity.Value / 1e-2, AreaUnit.SquareDecimeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareFoot, quantity => new Area(quantity.Value / 9.290304e-2, AreaUnit.SquareFoot));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareInch, quantity => new Area(quantity.Value / 0.00064516, AreaUnit.SquareInch));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareKilometer, quantity => new Area(quantity.Value / 1e6, AreaUnit.SquareKilometer));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMicrometer, quantity => new Area(quantity.Value / 1e-12, AreaUnit.SquareMicrometer));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMile, quantity => new Area(quantity.Value / 2.59e6, AreaUnit.SquareMile));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMillimeter, quantity => new Area(quantity.Value / 1e-6, AreaUnit.SquareMillimeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareNauticalMile, quantity => new Area(quantity.Value / 3429904, AreaUnit.SquareNauticalMile));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareYard, quantity => new Area(quantity.Value / 0.836127, AreaUnit.SquareYard));
- unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.UsSurveySquareFoot, quantity => new Area(quantity.Value / 0.09290341161, AreaUnit.UsSurveySquareFoot));
+ // Register in unit converter: AreaUnit -> BaseUnit
+ unitConverter.SetConversionFunction(AreaUnit.Acre, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.Hectare, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareCentimeter, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareDecimeter, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareFoot, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareInch, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareKilometer, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMicrometer, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMile, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMillimeter, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareNauticalMile, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareYard, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
+ unitConverter.SetConversionFunction(AreaUnit.UsSurveySquareFoot, AreaUnit.SquareMeter, quantity => quantity.ToUnit(AreaUnit.SquareMeter));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMeter, quantity => quantity);
- // Register in unit converter: AreaUnit -> BaseUnit
- unitConverter.SetConversionFunction(AreaUnit.Acre, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 4046.85642, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.Hectare, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 1e4, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareCentimeter, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 1e-4, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareDecimeter, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 1e-2, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareFoot, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 9.290304e-2, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareInch, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 0.00064516, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareKilometer, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 1e6, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareMicrometer, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 1e-12, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareMile, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 2.59e6, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareMillimeter, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 1e-6, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareNauticalMile, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 3429904, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.SquareYard, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 0.836127, AreaUnit.SquareMeter));
- unitConverter.SetConversionFunction(AreaUnit.UsSurveySquareFoot, AreaUnit.SquareMeter, quantity => new Area(quantity.Value * 0.09290341161, AreaUnit.SquareMeter));
+ // Register in unit converter: BaseUnit -> AreaUnit
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.Acre, quantity => quantity.ToUnit(AreaUnit.Acre));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.Hectare, quantity => quantity.ToUnit(AreaUnit.Hectare));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareCentimeter, quantity => quantity.ToUnit(AreaUnit.SquareCentimeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareDecimeter, quantity => quantity.ToUnit(AreaUnit.SquareDecimeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareFoot, quantity => quantity.ToUnit(AreaUnit.SquareFoot));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareInch, quantity => quantity.ToUnit(AreaUnit.SquareInch));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareKilometer, quantity => quantity.ToUnit(AreaUnit.SquareKilometer));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMicrometer, quantity => quantity.ToUnit(AreaUnit.SquareMicrometer));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMile, quantity => quantity.ToUnit(AreaUnit.SquareMile));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareMillimeter, quantity => quantity.ToUnit(AreaUnit.SquareMillimeter));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareNauticalMile, quantity => quantity.ToUnit(AreaUnit.SquareNauticalMile));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.SquareYard, quantity => quantity.ToUnit(AreaUnit.SquareYard));
+ unitConverter.SetConversionFunction(AreaUnit.SquareMeter, AreaUnit.UsSurveySquareFoot, quantity => quantity.ToUnit(AreaUnit.UsSurveySquareFoot));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -692,13 +692,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out AreaU
/// Get from adding two .
public static Area operator +(Area left, Area right)
{
- return new Area(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new Area(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static Area operator -(Area left, Area right)
{
- return new Area(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new Area(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -732,25 +732,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out AreaU
/// Returns true if less or equal to.
public static bool operator <=(Area left, Area right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(Area left, Area right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(Area left, Area right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(Area left, Area right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -779,7 +779,7 @@ public int CompareTo(object obj)
///
public int CompareTo(Area other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -796,7 +796,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(Area other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -870,10 +870,10 @@ public override int GetHashCode()
public double As(AreaUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -911,36 +911,88 @@ public Area ToUnit(AreaUnit unit)
}
///
- /// Converts this Area to another Area using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A Area with the specified unit.
public Area ToUnit(AreaUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(Area), Unit, typeof(Area), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (Area)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (Area)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(AreaUnit unit, out Area? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // AreaUnit -> BaseUnit
+ (AreaUnit.Acre, AreaUnit.SquareMeter) => new Area(_value * 4046.85642, AreaUnit.SquareMeter),
+ (AreaUnit.Hectare, AreaUnit.SquareMeter) => new Area(_value * 1e4, AreaUnit.SquareMeter),
+ (AreaUnit.SquareCentimeter, AreaUnit.SquareMeter) => new Area(_value * 1e-4, AreaUnit.SquareMeter),
+ (AreaUnit.SquareDecimeter, AreaUnit.SquareMeter) => new Area(_value * 1e-2, AreaUnit.SquareMeter),
+ (AreaUnit.SquareFoot, AreaUnit.SquareMeter) => new Area(_value * 9.290304e-2, AreaUnit.SquareMeter),
+ (AreaUnit.SquareInch, AreaUnit.SquareMeter) => new Area(_value * 0.00064516, AreaUnit.SquareMeter),
+ (AreaUnit.SquareKilometer, AreaUnit.SquareMeter) => new Area(_value * 1e6, AreaUnit.SquareMeter),
+ (AreaUnit.SquareMicrometer, AreaUnit.SquareMeter) => new Area(_value * 1e-12, AreaUnit.SquareMeter),
+ (AreaUnit.SquareMile, AreaUnit.SquareMeter) => new Area(_value * 2.59e6, AreaUnit.SquareMeter),
+ (AreaUnit.SquareMillimeter, AreaUnit.SquareMeter) => new Area(_value * 1e-6, AreaUnit.SquareMeter),
+ (AreaUnit.SquareNauticalMile, AreaUnit.SquareMeter) => new Area(_value * 3429904, AreaUnit.SquareMeter),
+ (AreaUnit.SquareYard, AreaUnit.SquareMeter) => new Area(_value * 0.836127, AreaUnit.SquareMeter),
+ (AreaUnit.UsSurveySquareFoot, AreaUnit.SquareMeter) => new Area(_value * 0.09290341161, AreaUnit.SquareMeter),
+
+ // BaseUnit -> AreaUnit
+ (AreaUnit.SquareMeter, AreaUnit.Acre) => new Area(_value / 4046.85642, AreaUnit.Acre),
+ (AreaUnit.SquareMeter, AreaUnit.Hectare) => new Area(_value / 1e4, AreaUnit.Hectare),
+ (AreaUnit.SquareMeter, AreaUnit.SquareCentimeter) => new Area(_value / 1e-4, AreaUnit.SquareCentimeter),
+ (AreaUnit.SquareMeter, AreaUnit.SquareDecimeter) => new Area(_value / 1e-2, AreaUnit.SquareDecimeter),
+ (AreaUnit.SquareMeter, AreaUnit.SquareFoot) => new Area(_value / 9.290304e-2, AreaUnit.SquareFoot),
+ (AreaUnit.SquareMeter, AreaUnit.SquareInch) => new Area(_value / 0.00064516, AreaUnit.SquareInch),
+ (AreaUnit.SquareMeter, AreaUnit.SquareKilometer) => new Area(_value / 1e6, AreaUnit.SquareKilometer),
+ (AreaUnit.SquareMeter, AreaUnit.SquareMicrometer) => new Area(_value / 1e-12, AreaUnit.SquareMicrometer),
+ (AreaUnit.SquareMeter, AreaUnit.SquareMile) => new Area(_value / 2.59e6, AreaUnit.SquareMile),
+ (AreaUnit.SquareMeter, AreaUnit.SquareMillimeter) => new Area(_value / 1e-6, AreaUnit.SquareMillimeter),
+ (AreaUnit.SquareMeter, AreaUnit.SquareNauticalMile) => new Area(_value / 3429904, AreaUnit.SquareNauticalMile),
+ (AreaUnit.SquareMeter, AreaUnit.SquareYard) => new Area(_value / 0.836127, AreaUnit.SquareYard),
+ (AreaUnit.SquareMeter, AreaUnit.UsSurveySquareFoot) => new Area(_value / 0.09290341161, AreaUnit.UsSurveySquareFoot),
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -974,12 +1026,6 @@ public Area ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(AreaUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/AreaDensity.g.cs b/UnitsNet/GeneratedCode/Quantities/AreaDensity.g.cs
index 6ba260fa11..03f0b8c1b4 100644
--- a/UnitsNet/GeneratedCode/Quantities/AreaDensity.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/AreaDensity.g.cs
@@ -202,12 +202,12 @@ public AreaDensity(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AreaDensityUnit
+ // Register in unit converter: AreaDensityUnit -> BaseUnit
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AreaDensityUnit.KilogramPerSquareMeter, AreaDensityUnit.KilogramPerSquareMeter, quantity => quantity);
- // Register in unit converter: AreaDensityUnit -> BaseUnit
+ // Register in unit converter: BaseUnit -> AreaDensityUnit
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -418,13 +418,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out AreaD
/// Get from adding two .
public static AreaDensity operator +(AreaDensity left, AreaDensity right)
{
- return new AreaDensity(left.Value + right.GetValueAs(left.Unit), left.Unit);
+ return new AreaDensity(left.Value + right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from subtracting two .
public static AreaDensity operator -(AreaDensity left, AreaDensity right)
{
- return new AreaDensity(left.Value - right.GetValueAs(left.Unit), left.Unit);
+ return new AreaDensity(left.Value - right.ToUnit(left.Unit).Value, left.Unit);
}
/// Get from multiplying value and .
@@ -458,25 +458,25 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out AreaD
/// Returns true if less or equal to.
public static bool operator <=(AreaDensity left, AreaDensity right)
{
- return left.Value <= right.GetValueAs(left.Unit);
+ return left.Value <= right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than or equal to.
public static bool operator >=(AreaDensity left, AreaDensity right)
{
- return left.Value >= right.GetValueAs(left.Unit);
+ return left.Value >= right.ToUnit(left.Unit).Value;
}
/// Returns true if less than.
public static bool operator <(AreaDensity left, AreaDensity right)
{
- return left.Value < right.GetValueAs(left.Unit);
+ return left.Value < right.ToUnit(left.Unit).Value;
}
/// Returns true if greater than.
public static bool operator >(AreaDensity left, AreaDensity right)
{
- return left.Value > right.GetValueAs(left.Unit);
+ return left.Value > right.ToUnit(left.Unit).Value;
}
/// Returns true if exactly equal.
@@ -505,7 +505,7 @@ public int CompareTo(object obj)
///
public int CompareTo(AreaDensity other)
{
- return _value.CompareTo(other.GetValueAs(this.Unit));
+ return _value.CompareTo(other.ToUnit(this.Unit).Value);
}
///
@@ -522,7 +522,7 @@ public override bool Equals(object obj)
/// Consider using for safely comparing floating point values.
public bool Equals(AreaDensity other)
{
- return _value.Equals(other.GetValueAs(this.Unit));
+ return _value.Equals(other.ToUnit(this.Unit).Value);
}
///
@@ -596,10 +596,10 @@ public override int GetHashCode()
public double As(AreaDensityUnit unit)
{
if (Unit == unit)
- return Convert.ToDouble(Value);
+ return (double)Value;
- var converted = GetValueAs(unit);
- return Convert.ToDouble(converted);
+ var converted = ToUnit(unit);
+ return (double)converted.Value;
}
///
@@ -637,36 +637,62 @@ public AreaDensity ToUnit(AreaDensityUnit unit)
}
///
- /// Converts this AreaDensity to another AreaDensity using the given with the unit representation .
+ /// Converts this to another using the given with the unit representation .
///
/// The unit to convert to.
/// The to use for the conversion.
/// A AreaDensity with the specified unit.
public AreaDensity ToUnit(AreaDensityUnit unit, UnitConverter unitConverter)
{
- if (Unit == unit)
+ if (TryToUnit(unit, out var converted))
{
- // Already in requested units.
- return this;
+ // Try to convert using the auto-generated conversion methods.
+ return converted!.Value;
}
else if (unitConverter.TryGetConversionFunction((typeof(AreaDensity), Unit, typeof(AreaDensity), unit), out var conversionFunction))
{
- // Direct conversion to requested unit found. Return the converted quantity.
- var converted = conversionFunction(this);
- return (AreaDensity)converted;
+ // See if the unit converter has an extensibility conversion registered.
+ return (AreaDensity)conversionFunction(this);
}
else if (Unit != BaseUnit)
{
- // Direct conversion to requested unit NOT found. Convert to BaseUnit, and then from BaseUnit to requested unit.
+ // Conversion to requested unit NOT found. Try to convert to BaseUnit, and then from BaseUnit to requested unit.
var inBaseUnits = ToUnit(BaseUnit);
return inBaseUnits.ToUnit(unit);
}
else
{
+ // No possible conversion
throw new NotImplementedException($"Can not convert {Unit} to {unit}.");
}
}
+ ///
+ /// Attempts to convert this to another with the unit representation .
+ ///
+ /// The unit to convert to.
+ /// The converted in , if successful.
+ /// True if successful, otherwise false.
+ private bool TryToUnit(AreaDensityUnit unit, out AreaDensity? converted)
+ {
+ if (_unit == unit)
+ {
+ converted = this;
+ return true;
+ }
+
+ converted = (_unit, unit) switch
+ {
+ // AreaDensityUnit -> BaseUnit
+
+ // BaseUnit -> AreaDensityUnit
+
+ _ => null!
+ };
+
+ return converted != null;
+ }
+
///
IQuantity IQuantity.ToUnit(Enum unit)
{
@@ -700,12 +726,6 @@ public AreaDensity ToUnit(UnitSystem unitSystem)
///
IQuantity IQuantity.ToUnit(UnitSystem unitSystem) => ToUnit(unitSystem);
- private double GetValueAs(AreaDensityUnit unit)
- {
- var converted = ToUnit(unit);
- return (double)converted.Value;
- }
-
#endregion
#region ToString Methods
diff --git a/UnitsNet/GeneratedCode/Quantities/AreaMomentOfInertia.g.cs b/UnitsNet/GeneratedCode/Quantities/AreaMomentOfInertia.g.cs
index 3dea190989..5671b3028f 100644
--- a/UnitsNet/GeneratedCode/Quantities/AreaMomentOfInertia.g.cs
+++ b/UnitsNet/GeneratedCode/Quantities/AreaMomentOfInertia.g.cs
@@ -232,22 +232,22 @@ public AreaMomentOfInertia(double value, UnitSystem unitSystem)
/// The to register the default conversion functions in.
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
{
- // Register in unit converter: BaseUnit -> AreaMomentOfInertiaUnit
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.CentimeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value * 1e8, AreaMomentOfInertiaUnit.CentimeterToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.DecimeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value * 1e4, AreaMomentOfInertiaUnit.DecimeterToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.FootToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value / Math.Pow(0.3048, 4), AreaMomentOfInertiaUnit.FootToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.InchToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value / Math.Pow(2.54e-2, 4), AreaMomentOfInertiaUnit.InchToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.MillimeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value * 1e12, AreaMomentOfInertiaUnit.MillimeterToTheFourth));
+ // Register in unit converter: AreaMomentOfInertiaUnit -> BaseUnit
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.CentimeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.MeterToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.DecimeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.MeterToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.FootToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.MeterToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.InchToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.MeterToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MillimeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.MeterToTheFourth));
// Register in unit converter: BaseUnit <-> BaseUnit
unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => quantity);
- // Register in unit converter: AreaMomentOfInertiaUnit -> BaseUnit
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.CentimeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value / 1e8, AreaMomentOfInertiaUnit.MeterToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.DecimeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value / 1e4, AreaMomentOfInertiaUnit.MeterToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.FootToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value * Math.Pow(0.3048, 4), AreaMomentOfInertiaUnit.MeterToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.InchToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value * Math.Pow(2.54e-2, 4), AreaMomentOfInertiaUnit.MeterToTheFourth));
- unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MillimeterToTheFourth, AreaMomentOfInertiaUnit.MeterToTheFourth, quantity => new AreaMomentOfInertia(quantity.Value / 1e12, AreaMomentOfInertiaUnit.MeterToTheFourth));
+ // Register in unit converter: BaseUnit -> AreaMomentOfInertiaUnit
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.CentimeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.CentimeterToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.DecimeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.DecimeterToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.FootToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.FootToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.InchToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.InchToTheFourth));
+ unitConverter.SetConversionFunction(AreaMomentOfInertiaUnit.MeterToTheFourth, AreaMomentOfInertiaUnit.MillimeterToTheFourth, quantity => quantity.ToUnit(AreaMomentOfInertiaUnit.MillimeterToTheFourth));
}
internal static void MapGeneratedLocalizations(UnitAbbreviationsCache unitAbbreviationsCache)
@@ -513,13 +513,13 @@ public static bool TryParseUnit(string str, IFormatProvider? provider, out AreaM
/// Get