You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
On a side-note, we are generally trying to move away from enums and towards string based values, to better support third-party conversions and units. QuantityType enum is deprecated and will be removed in v5 in favor of passing strings like Length.
I assume we could do something similar for the quantity unit enums like LengthUnit, and maybe provide overloads like this:
Describe the bug
Calling
UnitAbbreviationsCache.Default.GetDefaultAbbreviation(unitType)
throws aNotImplementedException
(e.g. "No abbreviation is specified for Enum.Millimeter") when passed a value ofSystem.Enum {UnitsNet.Units.LengthUnit}
instead ofUnitsNet.Units.LengthUnit
. Its sister methodsGetUnitAbbreviations<TUnitType>()
andGetUnitAbbreviations()
behave the same way.To Reproduce
Steps to reproduce the behavior (just an example):
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 theUnitInfo
class alongside the fullName
property, or alternatively if aGetAbbreviation(Enum unitEnum)
method was added to theQuantityInfo
class.The text was updated successfully, but these errors were encountered: