Description
Describe the bug
Calling UnitAbbreviationsCache.Default.GetDefaultAbbreviation(unitType)
throws a NotImplementedException
(e.g. "No abbreviation is specified for Enum.Millimeter") when passed a value of System.Enum {UnitsNet.Units.LengthUnit}
instead of UnitsNet.Units.LengthUnit
. Its sister methods GetUnitAbbreviations<TUnitType>()
and GetUnitAbbreviations()
behave the same way.
To Reproduce
Steps to reproduce the behavior (just an example):
- Add nuget UnitsNet 4.125.0 to a .NET 6.0 project
- Build using Visual Studio 2022 Community v17.0.1
- Attempt to execute the following code:
string quantityName = "Length";
string unitName = "Millimeter";
var quantityInfo = Quantity.ByName.FirstOrDefault(d => d.Key == quantityName).Value;
if (quantityInfo != default && Enum.TryParse(quantityInfo.UnitType, unitName, out var unitInfo)) {
// This line throws a NotImplementedException
string abbreviation = UnitAbbreviationsCache.Default.GetDefaultAbbreviation((Enum)unitInfo);
}
Expected behavior
The method should return the abbreviated form of millimeter ("mm").
Additional notes
The rationale behind this use case is to find the abbreviation of a unit that is only known at runtime, i.e. from the strings "Length" and "Millimeter".
An alternative workaround would be possible if an Abbreviation
property was added to the UnitInfo
class alongside the full Name
property, or alternatively if a GetAbbreviation(Enum unitEnum)
method was added to the QuantityInfo
class.