Skip to content

UnitAbbreviationsCache.GetDefaultAbbreviation(Type unitType) fails on boxed enums #1062

Closed
@Extragorey

Description

@Extragorey

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):

  1. Add nuget UnitsNet 4.125.0 to a .NET 6.0 project
  2. Build using Visual Studio 2022 Community v17.0.1
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions