From 6f7426479a88ad844e002736cfcff0116900eac6 Mon Sep 17 00:00:00 2001 From: June Meservy Date: Thu, 20 Nov 2025 11:07:30 +0100 Subject: [PATCH 1/6] UnitsNetBaseJsonConverter minor bug fix for compatibility with UnitsNet 6.0.0-pre017 --- .../UnitsNetBaseJsonConverter.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs index d4f6053579..d7bfe51887 100644 --- a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs +++ b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs @@ -96,7 +96,12 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) if (registeredQuantity is not null) { - return (IQuantity)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit)!; + IQuantity? instance = (IQuantity?)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit); + if (instance is null) + { + throw new Exception("Unable to convert value unit, instance is null."); + } + return instance; } return Quantity.From(valueUnit.Value, unit); From 5637b01e480fd6caba76befc1a8d74ca2468967b Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Fri, 17 Jul 2026 14:21:24 +0200 Subject: [PATCH 2/6] Use specific exception for custom quantity instantiation failures --- .../UnitsNetBaseJsonConverterTest.cs | 26 +++++++++++++++++++ .../UnitsNetBaseJsonConverter.cs | 23 ++++++++++++---- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs index b07bf62272..171af0ee99 100644 --- a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs +++ b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; +using UnitsNet.Tests.CustomQuantities; using Xunit; namespace UnitsNet.Serialization.JsonNet.Tests @@ -67,6 +68,21 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_ Assert.Equal("PowerUnit Watt", result.Data["type"]); } + [Fact] + public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_InvalidOperationException_when_registered_quantity_cannot_be_instantiated() + { + var sut = new TestQuantityConverter(); + sut.RegisterCustomType(typeof(IQuantity), typeof(HowMuchUnit)); + + var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); + + Assert.Contains("Unable to instantiate registered quantity type", result.Message); + Assert.Equal(typeof(IQuantity), result.Data["quantityType"]); + Assert.Equal(typeof(HowMuchUnit), result.Data["unitType"]); + Assert.Equal(HowMuchUnit.Some, result.Data["unit"]); + Assert.NotNull(result.InnerException); + } + [Fact] public void UnitsNetBaseJsonConverter_CreateLocalSerializer_works_as_expected() { @@ -226,5 +242,15 @@ private class TestConverter : UnitsNetBaseJsonConverter return (result.Unit, result.Value); } } + + private class TestQuantityConverter : UnitsNetBaseJsonConverter + { + public override bool CanRead => false; + public override bool CanWrite => false; + public override void WriteJson(JsonWriter writer, IQuantity value, JsonSerializer serializer) => throw new NotImplementedException(); + public override IQuantity ReadJson(JsonReader reader, Type objectType, IQuantity existingValue, bool hasExistingValue, JsonSerializer serializer) => throw new NotImplementedException(); + + public IQuantity Test_ConvertValueUnit(string unit, double value) => ConvertValueUnit(new ValueUnit {Unit = unit, Value = value}); + } } } diff --git a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs index d7bfe51887..4e665476ad 100644 --- a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs +++ b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs @@ -92,21 +92,34 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) } var unit = GetUnit(valueUnit.Unit); - var registeredQuantity = GetRegisteredType(valueUnit.Unit).Quantity; + var registeredType = GetRegisteredType(valueUnit.Unit); + var registeredQuantity = registeredType.Quantity; if (registeredQuantity is not null) { - IQuantity? instance = (IQuantity?)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit); - if (instance is null) + try { - throw new Exception("Unable to convert value unit, instance is null."); + IQuantity? instance = (IQuantity?)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit); + return instance ?? throw CreateUnableToInstantiateQuantityException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit); + } + catch (Exception ex) when (ex is not InvalidOperationException) + { + throw CreateUnableToInstantiateQuantityException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit, ex); } - return instance; } return Quantity.From(valueUnit.Value, unit); } + private static InvalidOperationException CreateUnableToInstantiateQuantityException(Type quantityType, Type unitType, Enum unit, Exception? innerException = null) + { + var ex = new InvalidOperationException($"Unable to instantiate registered quantity type \"{quantityType.FullName}\" for unit \"{unitType.FullName}.{unit}\".", innerException); + ex.Data["quantityType"] = quantityType; + ex.Data["unitType"] = unitType; + ex.Data["unit"] = unit; + return ex; + } + private (Type? Quantity, Type? Unit) GetRegisteredType(string unit) { var (unitEnumTypeName, _) = SplitUnitString(unit); From 27927ac796a8ac4afca723d867385db72f57c445 Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Fri, 17 Jul 2026 19:10:54 +0200 Subject: [PATCH 3/6] Throw UnitsNetException for JsonNet instantiation failures --- .../UnitsNetBaseJsonConverterTest.cs | 4 ++-- .../UnitsNetBaseJsonConverter.cs | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs index 171af0ee99..767a03ccb6 100644 --- a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs +++ b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs @@ -69,12 +69,12 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_ } [Fact] - public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_InvalidOperationException_when_registered_quantity_cannot_be_instantiated() + public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_when_registered_quantity_cannot_be_instantiated() { var sut = new TestQuantityConverter(); sut.RegisterCustomType(typeof(IQuantity), typeof(HowMuchUnit)); - var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); + var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); Assert.Contains("Unable to instantiate registered quantity type", result.Message); Assert.Equal(typeof(IQuantity), result.Data["quantityType"]); diff --git a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs index 4e665476ad..2fd4069923 100644 --- a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs +++ b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs @@ -102,7 +102,7 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) IQuantity? instance = (IQuantity?)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit); return instance ?? throw CreateUnableToInstantiateQuantityException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit); } - catch (Exception ex) when (ex is not InvalidOperationException) + catch (Exception ex) when (ex is not UnitsNetException) { throw CreateUnableToInstantiateQuantityException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit, ex); } @@ -111,9 +111,10 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) return Quantity.From(valueUnit.Value, unit); } - private static InvalidOperationException CreateUnableToInstantiateQuantityException(Type quantityType, Type unitType, Enum unit, Exception? innerException = null) + private static UnitsNetException CreateUnableToInstantiateQuantityException(Type quantityType, Type unitType, Enum unit, Exception? innerException = null) { - var ex = new InvalidOperationException($"Unable to instantiate registered quantity type \"{quantityType.FullName}\" for unit \"{unitType.FullName}.{unit}\".", innerException); + string message = $"Unable to instantiate registered quantity type \"{quantityType.FullName}\" for unit \"{unitType.FullName}.{unit}\"."; + var ex = innerException is null ? new UnitsNetException(message) : new UnitsNetException(message, innerException); ex.Data["quantityType"] = quantityType; ex.Data["unitType"] = unitType; ex.Data["unit"] = unit; From b9f4858b6235a5eda19542b870de31be978653fe Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Fri, 17 Jul 2026 19:13:49 +0200 Subject: [PATCH 4/6] Clarify JsonNet quantity instantiation failures --- .../UnitsNetBaseJsonConverterTest.cs | 35 +++++++++++++++++++ .../UnitsNetBaseJsonConverter.cs | 21 +++++++---- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs index 767a03ccb6..4d7d035fdb 100644 --- a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs +++ b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs @@ -77,12 +77,30 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_ var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); Assert.Contains("Unable to instantiate registered quantity type", result.Message); + Assert.Equal("JsonNetRegisteredQuantityInstantiationFailed", result.Data["errorCode"]); Assert.Equal(typeof(IQuantity), result.Data["quantityType"]); Assert.Equal(typeof(HowMuchUnit), result.Data["unitType"]); Assert.Equal(HowMuchUnit.Some, result.Data["unit"]); Assert.NotNull(result.InnerException); } + [Fact] + public void UnitsNetBaseJsonConverter_ConvertValueUnit_wraps_exception_when_registered_quantity_constructor_throws() + { + var sut = new TestQuantityConverter(); + sut.RegisterCustomType(typeof(ThrowingQuantity), typeof(HowMuchUnit)); + + var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); + + Assert.Contains("Unable to instantiate registered quantity type", result.Message); + Assert.Equal("JsonNetRegisteredQuantityInstantiationFailed", result.Data["errorCode"]); + Assert.Equal(typeof(ThrowingQuantity), result.Data["quantityType"]); + Assert.Equal(typeof(HowMuchUnit), result.Data["unitType"]); + Assert.Equal(HowMuchUnit.Some, result.Data["unit"]); + Assert.NotNull(result.InnerException); + Assert.Contains("Thrown from registered quantity constructor.", result.InnerException.ToString()); + } + [Fact] public void UnitsNetBaseJsonConverter_CreateLocalSerializer_works_as_expected() { @@ -252,5 +270,22 @@ private class TestQuantityConverter : UnitsNetBaseJsonConverter public IQuantity Test_ConvertValueUnit(string unit, double value) => ConvertValueUnit(new ValueUnit {Unit = unit, Value = value}); } + + private class ThrowingQuantity : IQuantity + { + public ThrowingQuantity(double value, HowMuchUnit unit) + { + throw new UnitsNetException("Thrown from registered quantity constructor."); + } + + public QuantityInfo QuantityInfo => throw new NotImplementedException(); + public Enum Unit => throw new NotImplementedException(); + public double Value => throw new NotImplementedException(); + public UnitKey UnitKey => throw new NotImplementedException(); + public double As(Enum unit) => throw new NotImplementedException(); + public double As(UnitKey unitKey) => throw new NotImplementedException(); + public IQuantity ToUnit(Enum unit) => throw new NotImplementedException(); + public string ToString(string format, IFormatProvider formatProvider) => throw new NotImplementedException(); + } } } diff --git a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs index 2fd4069923..9952f54f4a 100644 --- a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs +++ b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs @@ -21,12 +21,15 @@ namespace UnitsNet.Serialization.JsonNet #endif public abstract class UnitsNetBaseJsonConverter : NullableQuantityConverter { + private const string ErrorCodeDataKey = "errorCode"; + private const string RegisteredQuantityInstantiationFailedErrorCode = "JsonNetRegisteredQuantityInstantiationFailed"; + private readonly ConcurrentDictionary _registeredTypes = new(); /// /// Register custom types so that the converter can instantiate these quantities. - /// Instead of calling , the will be used to instantiate the object. - /// It is therefore assumed that the constructor of is specified with new T(double value, typeof() unit). + /// Instead of calling , will be used to instantiate the object. + /// It is therefore assumed that has a public constructor that accepts (double value, unit). /// Registering the same multiple times, it will overwrite the one registered. /// public void RegisterCustomType(Type quantity, Type unit) @@ -100,21 +103,25 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) try { IQuantity? instance = (IQuantity?)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit); - return instance ?? throw CreateUnableToInstantiateQuantityException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit); + return instance ?? throw CreateRegisteredQuantityInstantiationException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit); } - catch (Exception ex) when (ex is not UnitsNetException) + catch (Exception ex) when (!IsRegisteredQuantityInstantiationException(ex)) { - throw CreateUnableToInstantiateQuantityException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit, ex); + throw CreateRegisteredQuantityInstantiationException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit, ex); } } return Quantity.From(valueUnit.Value, unit); } - private static UnitsNetException CreateUnableToInstantiateQuantityException(Type quantityType, Type unitType, Enum unit, Exception? innerException = null) + private static bool IsRegisteredQuantityInstantiationException(Exception ex) => + ex is UnitsNetException && Equals(ex.Data[ErrorCodeDataKey], RegisteredQuantityInstantiationFailedErrorCode); + + private static UnitsNetException CreateRegisteredQuantityInstantiationException(Type quantityType, Type unitType, Enum unit, Exception? innerException = null) { - string message = $"Unable to instantiate registered quantity type \"{quantityType.FullName}\" for unit \"{unitType.FullName}.{unit}\"."; + string message = $"Unable to instantiate registered quantity type \"{quantityType.FullName}\" for unit \"{unitType.FullName}.{unit}\". The converter expected a non-null quantity instance from a public constructor accepting (double value, {unitType.Name} unit)."; var ex = innerException is null ? new UnitsNetException(message) : new UnitsNetException(message, innerException); + ex.Data[ErrorCodeDataKey] = RegisteredQuantityInstantiationFailedErrorCode; ex.Data["quantityType"] = quantityType; ex.Data["unitType"] = unitType; ex.Data["unit"] = unit; From be51b38f52ad6dba229c59f217f06b6a40f3a2b2 Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Fri, 17 Jul 2026 19:22:26 +0200 Subject: [PATCH 5/6] Share UnitsNet exception error code key --- .../UnitsNetBaseJsonConverterTest.cs | 4 ++-- UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs | 5 ++--- UnitsNet/Exceptions/UnitsNetException.cs | 5 +++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs index 4d7d035fdb..1d7a292464 100644 --- a/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs +++ b/UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs @@ -77,7 +77,7 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_ var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); Assert.Contains("Unable to instantiate registered quantity type", result.Message); - Assert.Equal("JsonNetRegisteredQuantityInstantiationFailed", result.Data["errorCode"]); + Assert.Equal("JsonNetRegisteredQuantityInstantiationFailed", result.Data[UnitsNetException.ErrorCodeDataKey]); Assert.Equal(typeof(IQuantity), result.Data["quantityType"]); Assert.Equal(typeof(HowMuchUnit), result.Data["unitType"]); Assert.Equal(HowMuchUnit.Some, result.Data["unit"]); @@ -93,7 +93,7 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_wraps_exception_when_regi var result = Assert.Throws(() => sut.Test_ConvertValueUnit("HowMuchUnit.Some", 10.2365)); Assert.Contains("Unable to instantiate registered quantity type", result.Message); - Assert.Equal("JsonNetRegisteredQuantityInstantiationFailed", result.Data["errorCode"]); + Assert.Equal("JsonNetRegisteredQuantityInstantiationFailed", result.Data[UnitsNetException.ErrorCodeDataKey]); Assert.Equal(typeof(ThrowingQuantity), result.Data["quantityType"]); Assert.Equal(typeof(HowMuchUnit), result.Data["unitType"]); Assert.Equal(HowMuchUnit.Some, result.Data["unit"]); diff --git a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs index 9952f54f4a..60ea0fd6bc 100644 --- a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs +++ b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs @@ -21,7 +21,6 @@ namespace UnitsNet.Serialization.JsonNet #endif public abstract class UnitsNetBaseJsonConverter : NullableQuantityConverter { - private const string ErrorCodeDataKey = "errorCode"; private const string RegisteredQuantityInstantiationFailedErrorCode = "JsonNetRegisteredQuantityInstantiationFailed"; private readonly ConcurrentDictionary _registeredTypes = new(); @@ -115,13 +114,13 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) } private static bool IsRegisteredQuantityInstantiationException(Exception ex) => - ex is UnitsNetException && Equals(ex.Data[ErrorCodeDataKey], RegisteredQuantityInstantiationFailedErrorCode); + ex is UnitsNetException && Equals(ex.Data[UnitsNetException.ErrorCodeDataKey], RegisteredQuantityInstantiationFailedErrorCode); private static UnitsNetException CreateRegisteredQuantityInstantiationException(Type quantityType, Type unitType, Enum unit, Exception? innerException = null) { string message = $"Unable to instantiate registered quantity type \"{quantityType.FullName}\" for unit \"{unitType.FullName}.{unit}\". The converter expected a non-null quantity instance from a public constructor accepting (double value, {unitType.Name} unit)."; var ex = innerException is null ? new UnitsNetException(message) : new UnitsNetException(message, innerException); - ex.Data[ErrorCodeDataKey] = RegisteredQuantityInstantiationFailedErrorCode; + ex.Data[UnitsNetException.ErrorCodeDataKey] = RegisteredQuantityInstantiationFailedErrorCode; ex.Data["quantityType"] = quantityType; ex.Data["unitType"] = unitType; ex.Data["unit"] = unit; diff --git a/UnitsNet/Exceptions/UnitsNetException.cs b/UnitsNet/Exceptions/UnitsNetException.cs index a517b700c2..31236cb9ca 100644 --- a/UnitsNet/Exceptions/UnitsNetException.cs +++ b/UnitsNet/Exceptions/UnitsNetException.cs @@ -10,6 +10,11 @@ namespace UnitsNet /// public class UnitsNetException : Exception { + /// + /// Key used in for stable UnitsNet error codes. + /// + public const string ErrorCodeDataKey = "errorCode"; + /// public UnitsNetException() { From 3e7dcc756065899a0896e9eb207a616dfdde0106 Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Fri, 17 Jul 2026 22:53:42 +0200 Subject: [PATCH 6/6] Document JsonNet custom quantity instantiation errors --- .../UnitsNetBaseJsonConverter.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs index 60ea0fd6bc..b9b5506791 100644 --- a/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs +++ b/UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs @@ -84,7 +84,7 @@ public void RegisterCustomType(Type quantity, Type unit) /// Convert a to an /// /// The value unit to convert - /// Thrown when an invalid Unit has been provided + /// Thrown when an invalid unit has been provided, or when a registered custom quantity type cannot be instantiated. /// An IQuantity protected IQuantity ConvertValueUnit(ValueUnit valueUnit) { @@ -99,14 +99,16 @@ protected IQuantity ConvertValueUnit(ValueUnit valueUnit) if (registeredQuantity is not null) { + // RegisterCustomType stores quantity/unit pairs, so a registered quantity has a registered unit. + Type registeredUnit = registeredType.Unit!; try { IQuantity? instance = (IQuantity?)Activator.CreateInstance(registeredQuantity, valueUnit.Value, unit); - return instance ?? throw CreateRegisteredQuantityInstantiationException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit); + return instance ?? throw CreateRegisteredQuantityInstantiationException(registeredQuantity, registeredUnit, unit); } catch (Exception ex) when (!IsRegisteredQuantityInstantiationException(ex)) { - throw CreateRegisteredQuantityInstantiationException(registeredQuantity, registeredType.Unit ?? unit.GetType(), unit, ex); + throw CreateRegisteredQuantityInstantiationException(registeredQuantity, registeredUnit, unit, ex); } }