diff --git a/CodeGen/Generators/UnitsNetGen/StaticQuantityGenerator.cs b/CodeGen/Generators/UnitsNetGen/StaticQuantityGenerator.cs index 04cb812d54..f25cae0c6e 100644 --- a/CodeGen/Generators/UnitsNetGen/StaticQuantityGenerator.cs +++ b/CodeGen/Generators/UnitsNetGen/StaticQuantityGenerator.cs @@ -28,18 +28,18 @@ public partial class Quantity /// /// Serves as a repository for predefined quantity conversion mappings, facilitating the automatic generation and retrieval of unit conversions in the UnitsNet library. /// - internal static class Provider + internal static class DefaultProvider { /// /// All QuantityInfo instances that are present in UnitsNet by default. /// - internal static IReadOnlyList DefaultQuantities => new QuantityInfo[] - {"); + internal static IReadOnlyList Quantities { get; } = + ["); foreach (var quantity in _quantities) Writer.WL($@" {quantity.Name}.Info,"); Writer.WL(@" - }; + ]; } }"); return Writer.ToString(); diff --git a/UnitsNet/CustomCode/UnitsNetSetup.cs b/UnitsNet/CustomCode/UnitsNetSetup.cs index cb45d2063b..ed53a93d5d 100644 --- a/UnitsNet/CustomCode/UnitsNetSetup.cs +++ b/UnitsNet/CustomCode/UnitsNetSetup.cs @@ -21,7 +21,8 @@ public sealed class UnitsNetSetup { static UnitsNetSetup() { - IReadOnlyCollection quantityInfos = Quantity.Provider.DefaultQuantities; + IReadOnlyCollection quantityInfos = Quantity.DefaultProvider.Quantities; + // note: in order to support the ConvertByAbbreviation, the unit converter should require a UnitParser in the constructor var unitConverter = UnitConverter.CreateDefault(); @@ -37,7 +38,7 @@ public UnitsNetSetup(IEnumerable quantityInfos, UnitConverter unit { var quantityInfoLookup = new QuantityInfoLookup(quantityInfos); var unitAbbreviations = new UnitAbbreviationsCache(quantityInfoLookup); - + UnitConverter = unitConverter; UnitAbbreviations = unitAbbreviations; Formatter = new QuantityFormatter(unitAbbreviations); @@ -68,7 +69,7 @@ public UnitsNetSetup(IEnumerable quantityInfos, UnitConverter unit /// quantities. /// public UnitAbbreviationsCache UnitAbbreviations { get; } - + /// /// Converts a quantity to string using the specified format strings and culture-specific format providers. /// diff --git a/UnitsNet/GeneratedCode/Quantity.g.cs b/UnitsNet/GeneratedCode/Quantity.g.cs index 403d455522..ee686fea09 100644 --- a/UnitsNet/GeneratedCode/Quantity.g.cs +++ b/UnitsNet/GeneratedCode/Quantity.g.cs @@ -29,13 +29,13 @@ public partial class Quantity /// /// Serves as a repository for predefined quantity conversion mappings, facilitating the automatic generation and retrieval of unit conversions in the UnitsNet library. /// - internal static class Provider + internal static class DefaultProvider { /// /// All QuantityInfo instances that are present in UnitsNet by default. /// - internal static IReadOnlyList DefaultQuantities => new QuantityInfo[] - { + internal static IReadOnlyList Quantities { get; } = + [ AbsorbedDoseOfIonizingRadiation.Info, Acceleration.Info, AmountOfSubstance.Info, @@ -163,6 +163,6 @@ internal static class Provider VolumePerLength.Info, VolumetricHeatCapacity.Info, WarpingMomentOfInertia.Info, - }; + ]; } } diff --git a/UnitsNet/QuantityInfoLookup.cs b/UnitsNet/QuantityInfoLookup.cs index 8a9dc0a6c2..1a8b9bb233 100644 --- a/UnitsNet/QuantityInfoLookup.cs +++ b/UnitsNet/QuantityInfoLookup.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; +using System.Linq; #if NET8_0_OR_GREATER using System.Collections.Frozen; using QuantityByTypeLookupDictionary = System.Collections.Frozen.FrozenDictionary; @@ -80,7 +77,7 @@ private UnitByKeyLookupDictionary GroupUnitsByKey() /// public QuantityInfoLookup(IEnumerable quantityInfos) { - _quantities = quantityInfos.ToArray(); + _quantities = quantityInfos as QuantityInfo[] ?? quantityInfos.ToArray(); _quantitiesByName = new Lazy(GroupQuantitiesByName); _quantitiesByType = new Lazy(GroupQuantitiesByType); _quantitiesByUnitType = new Lazy(GroupQuantitiesByUnitType); @@ -174,7 +171,7 @@ public IQuantity From(double value, UnitKey unit) { return GetUnitInfo(unit).From(value); } - + /// /// Attempts to create a quantity from the specified value and unit. /// @@ -194,7 +191,7 @@ public bool TryFrom(double value, [NotNullWhen(true)] Enum? unit, [NotNullWhen(t quantity = null; return false; } - + if (!TryGetUnitInfo(unit, out UnitInfo? unitInfo)) { quantity = null; @@ -270,7 +267,7 @@ public UnitInfo GetUnitByName(string quantityName, string unitName) Data = { ["quantityName"] = quantityName, ["unitName"] = unitName } }; } - + /// /// Attempts to parse unit information based on its quantity and unit names. /// diff --git a/UnitsNet/UnitConverter.cs b/UnitsNet/UnitConverter.cs index 76f7fdff17..0a9b75df11 100644 --- a/UnitsNet/UnitConverter.cs +++ b/UnitsNet/UnitConverter.cs @@ -85,7 +85,7 @@ public static void RegisterDefaultConversions(UnitConverter unitConverter) if (unitConverter is null) throw new ArgumentNullException(nameof(unitConverter)); - foreach(var quantity in Quantity.Provider.DefaultQuantities) + foreach (var quantity in Quantity.DefaultProvider.Quantities) { var registerMethod = quantity.QuantityType.GetMethod(nameof(Length.RegisterDefaultConversions), BindingFlags.NonPublic | BindingFlags.Static); registerMethod?.Invoke(null, new object[]{unitConverter}); @@ -369,7 +369,7 @@ public static bool TryConvertByName(double inputValue, string quantityName, stri result = quantity.As(toUnitInfo.Value); return true; } - + result = 0d; return false; }