Skip to content

Commit 97c3f16

Browse files
authored
Merge pull request #265 from plubbr/bugfix/parse-mapped-abbrev
Improves unit parsing to handle multiple words and special characters, by using the list of registered abbreviations in the regex instead of a regex pattern.
2 parents 00819a7 + 3f434da commit 97c3f16

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+136
-58
lines changed

UnitsNet.Tests/CustomCode/ParseTests.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,55 @@ public void TryParseLengthUnitUsEnglish(string s, bool expected)
164164
Assert.Equal(expected, actual);
165165
}
166166

167+
[Theory]
168+
[InlineData("!")]
169+
[InlineData("@")]
170+
[InlineData("#")]
171+
[InlineData("$")]
172+
[InlineData("%")]
173+
[InlineData("^")]
174+
[InlineData("&")]
175+
[InlineData("*")]
176+
[InlineData("-")]
177+
[InlineData("_")]
178+
[InlineData("?")]
179+
[InlineData("123")]
180+
[InlineData(" ")]
181+
public void TryParseLengthUnitAbbreviationSpecialCharacters(string s)
182+
{
183+
UnitSystem unitSystem = UnitSystem.GetCached("en-US");
184+
string abbrev = $"m{s}s";
185+
unitSystem.MapUnitToAbbreviation(UnitsNet.Units.LengthUnit.Meter, abbrev);
186+
UnitsNet.Units.LengthUnit result;
187+
bool actual = unitSystem.TryParse<UnitsNet.Units.LengthUnit>(abbrev, out result);
188+
Assert.Equal(true, actual);
189+
Assert.Equal(UnitsNet.Units.LengthUnit.Meter, result);
190+
}
191+
192+
[Theory]
193+
[InlineData("!")]
194+
[InlineData("@")]
195+
[InlineData("#")]
196+
[InlineData("$")]
197+
[InlineData("%")]
198+
[InlineData("^")]
199+
[InlineData("&")]
200+
[InlineData("*")]
201+
[InlineData("-")]
202+
[InlineData("_")]
203+
[InlineData("?")]
204+
[InlineData("123")]
205+
[InlineData(" ")]
206+
public void TryParseLengthSpecialCharacters(string s)
207+
{
208+
UnitSystem unitSystem = UnitSystem.GetCached("en-US");
209+
string abbrev = $"m{s}s";
210+
unitSystem.MapUnitToAbbreviation(UnitsNet.Units.LengthUnit.Meter, abbrev);
211+
bool actual = Length.TryParse($"10 {abbrev}", out Length result);
212+
Assert.Equal(true, actual);
213+
Assert.Equal(Length.FromMeters(10d), result);
214+
}
215+
167216
private static string AssertExceptionAndGetFullTypeName(Action code)
168217
{
169218
var exception = Assert.ThrowsAny<Exception>(code);

UnitsNet/CustomCode/UnitParser.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@
2929

3030
namespace UnitsNet
3131
{
32-
internal delegate TUnit ParseUnit<out TUnit>(string value, string unit, IFormatProvider formatProvider = null);
32+
internal delegate TQuantity ParseUnit<out TQuantity>(string value, string unit, IFormatProvider formatProvider = null);
3333

3434
internal static class UnitParser
3535
{
3636
[SuppressMessage("ReSharper", "UseStringInterpolation")]
37-
internal static TUnit ParseUnit<TUnit>([NotNull] string str,
37+
internal static TQuantity ParseUnit<TQuantityEnum, TQuantity>([NotNull] string str,
3838
[CanBeNull] IFormatProvider formatProvider,
39-
[NotNull] ParseUnit<TUnit> parseUnit,
40-
[NotNull] Func<TUnit, TUnit, TUnit> add)
39+
[NotNull] ParseUnit<TQuantity> parseUnit,
40+
[NotNull] Func<TQuantity, TQuantity, TQuantity> add)
4141
{
4242
if (str == null) throw new ArgumentNullException(nameof(str));
4343
if (parseUnit == null) throw new ArgumentNullException(nameof(parseUnit));
@@ -54,15 +54,23 @@ internal static TUnit ParseUnit<TUnit>([NotNull] string str,
5454

5555
const string exponentialRegex = @"(?:[eE][-+]?\d+)?)";
5656

57+
string[] unitAbbreviations = UnitSystem.GetCached(formatProvider)
58+
.GetAllAbbreviations(typeof(TQuantityEnum))
59+
.OrderByDescending(s => s.Length) // Important to order by length -- if "m" is before "mm" and the input is "mm", it will match just "m" and throw invalid string error
60+
.Select(Regex.Escape) // Escape special regex characters
61+
.ToArray();
62+
63+
string unitsRegex = $"({String.Join("|", unitAbbreviations)})";
64+
5765
string regexString = string.Format(@"(?:\s*(?<value>[-+]?{0}{1}{2}{3})?{4}{5}",
5866
numRegex, // capture base (integral) Quantity value
5967
exponentialRegex, // capture exponential (if any), end of Quantity capturing
6068
@"\s?", // ignore whitespace (allows both "1kg", "1 kg")
61-
@"(?<unit>[^\s\d,]+)", // capture Unit (non-whitespace) input
69+
$@"(?<unit>{unitsRegex})", // capture Unit by list of abbreviations
6270
@"(and)?,?", // allow "and" & "," separators between quantities
6371
@"(?<invalid>[a-z]*)?"); // capture invalid input
6472

65-
List<TUnit> quantities = ParseWithRegex(regexString, str, parseUnit, formatProvider);
73+
List<TQuantity> quantities = ParseWithRegex(regexString, str, parseUnit, formatProvider);
6674
if (quantities.Count == 0)
6775
{
6876
throw new ArgumentException(
@@ -74,14 +82,14 @@ internal static TUnit ParseUnit<TUnit>([NotNull] string str,
7482

7583
/// <summary>
7684
/// Parse a string given a particular regular expression.
77-
/// </summary>
85+
/// </summary>
7886
/// <exception cref="UnitsNetException">Error parsing string.</exception>
79-
private static List<TUnit> ParseWithRegex<TUnit>(string regexString, string str, ParseUnit<TUnit> parseUnit,
87+
private static List<TQuantity> ParseWithRegex<TQuantity>(string regexString, string str, ParseUnit<TQuantity> parseUnit,
8088
IFormatProvider formatProvider = null)
8189
{
8290
var regex = new Regex(regexString);
8391
MatchCollection matches = regex.Matches(str.Trim());
84-
var converted = new List<TUnit>();
92+
var converted = new List<TQuantity>();
8593

8694
foreach (Match match in matches)
8795
{
@@ -121,4 +129,4 @@ private static List<TUnit> ParseWithRegex<TUnit>(string regexString, string str,
121129
return converted;
122130
}
123131
}
124-
}
132+
}

UnitsNet/CustomCode/UnitSystem.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,27 @@ public string[] GetAllAbbreviations(Type unitType, int unitValue)
445445
: GetCached(FallbackCulture).GetAllAbbreviations(unitType, unitValue);
446446
}
447447

448+
/// <summary>
449+
/// Get all abbreviations for unit.
450+
/// </summary>
451+
/// <param name="unitType">Enum type for unit.</param>
452+
/// <param name="unitValue">Enum value for unit.</param>
453+
/// <returns>Unit abbreviations associated with unit.</returns>
454+
[PublicAPI]
455+
public string[] GetAllAbbreviations(Type unitType)
456+
{
457+
Dictionary<int, List<string>> unitValueToAbbrevs;
458+
if (_unitTypeToUnitValueToAbbrevs.TryGetValue(unitType, out unitValueToAbbrevs))
459+
{
460+
return unitValueToAbbrevs.Values.SelectMany(x => x).ToArray();
461+
}
462+
463+
// Fall back to default culture
464+
return IsFallbackCulture
465+
? new[] {$"(no abbreviations for {unitType.Name})"}
466+
: GetCached(FallbackCulture).GetAllAbbreviations(unitType);
467+
}
468+
448469
private void LoadDefaultAbbreviations([NotNull] IFormatProvider culture)
449470
{
450471
foreach (UnitLocalization localization in DefaultLocalizations)
@@ -494,4 +515,4 @@ private static object GetDefault(Type type)
494515
: null;
495516
}
496517
}
497-
}
518+
}

UnitsNet/GeneratedCode/UnitClasses/Acceleration.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ public static Acceleration Parse(string str, [CanBeNull] Culture culture)
647647
#else
648648
IFormatProvider formatProvider = culture;
649649
#endif
650-
return UnitParser.ParseUnit<Acceleration>(str, formatProvider,
650+
return UnitParser.ParseUnit<AccelerationUnit, Acceleration>(str, formatProvider,
651651
delegate(string value, string unit, IFormatProvider formatProvider2)
652652
{
653653
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/AmplitudeRatio.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ public static AmplitudeRatio Parse(string str, [CanBeNull] Culture culture)
544544
#else
545545
IFormatProvider formatProvider = culture;
546546
#endif
547-
return UnitParser.ParseUnit<AmplitudeRatio>(str, formatProvider,
547+
return UnitParser.ParseUnit<AmplitudeRatioUnit, AmplitudeRatio>(str, formatProvider,
548548
delegate(string value, string unit, IFormatProvider formatProvider2)
549549
{
550550
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Angle.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ public static Angle Parse(string str, [CanBeNull] Culture culture)
869869
#else
870870
IFormatProvider formatProvider = culture;
871871
#endif
872-
return UnitParser.ParseUnit<Angle>(str, formatProvider,
872+
return UnitParser.ParseUnit<AngleUnit, Angle>(str, formatProvider,
873873
delegate(string value, string unit, IFormatProvider formatProvider2)
874874
{
875875
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ApparentPower.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ public static ApparentPower Parse(string str, [CanBeNull] Culture culture)
499499
#else
500500
IFormatProvider formatProvider = culture;
501501
#endif
502-
return UnitParser.ParseUnit<ApparentPower>(str, formatProvider,
502+
return UnitParser.ParseUnit<ApparentPowerUnit, ApparentPower>(str, formatProvider,
503503
delegate(string value, string unit, IFormatProvider formatProvider2)
504504
{
505505
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Area.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ public static Area Parse(string str, [CanBeNull] Culture culture)
832832
#else
833833
IFormatProvider formatProvider = culture;
834834
#endif
835-
return UnitParser.ParseUnit<Area>(str, formatProvider,
835+
return UnitParser.ParseUnit<AreaUnit, Area>(str, formatProvider,
836836
delegate(string value, string unit, IFormatProvider formatProvider2)
837837
{
838838
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/BrakeSpecificFuelConsumption.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ public static BrakeSpecificFuelConsumption Parse(string str, [CanBeNull] Culture
499499
#else
500500
IFormatProvider formatProvider = culture;
501501
#endif
502-
return UnitParser.ParseUnit<BrakeSpecificFuelConsumption>(str, formatProvider,
502+
return UnitParser.ParseUnit<BrakeSpecificFuelConsumptionUnit, BrakeSpecificFuelConsumption>(str, formatProvider,
503503
delegate(string value, string unit, IFormatProvider formatProvider2)
504504
{
505505
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Density.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1683,7 +1683,7 @@ public static Density Parse(string str, [CanBeNull] Culture culture)
16831683
#else
16841684
IFormatProvider formatProvider = culture;
16851685
#endif
1686-
return UnitParser.ParseUnit<Density>(str, formatProvider,
1686+
return UnitParser.ParseUnit<DensityUnit, Density>(str, formatProvider,
16871687
delegate(string value, string unit, IFormatProvider formatProvider2)
16881688
{
16891689
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Duration.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ public static Duration Parse(string str, [CanBeNull] Culture culture)
758758
#else
759759
IFormatProvider formatProvider = culture;
760760
#endif
761-
return UnitParser.ParseUnit<Duration>(str, formatProvider,
761+
return UnitParser.ParseUnit<DurationUnit, Duration>(str, formatProvider,
762762
delegate(string value, string unit, IFormatProvider formatProvider2)
763763
{
764764
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/DynamicViscosity.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ public static DynamicViscosity Parse(string str, [CanBeNull] Culture culture)
573573
#else
574574
IFormatProvider formatProvider = culture;
575575
#endif
576-
return UnitParser.ParseUnit<DynamicViscosity>(str, formatProvider,
576+
return UnitParser.ParseUnit<DynamicViscosityUnit, DynamicViscosity>(str, formatProvider,
577577
delegate(string value, string unit, IFormatProvider formatProvider2)
578578
{
579579
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ElectricAdmittance.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ public static ElectricAdmittance Parse(string str, [CanBeNull] Culture culture)
536536
#else
537537
IFormatProvider formatProvider = culture;
538538
#endif
539-
return UnitParser.ParseUnit<ElectricAdmittance>(str, formatProvider,
539+
return UnitParser.ParseUnit<ElectricAdmittanceUnit, ElectricAdmittance>(str, formatProvider,
540540
delegate(string value, string unit, IFormatProvider formatProvider2)
541541
{
542542
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ElectricCurrent.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ public static ElectricCurrent Parse(string str, [CanBeNull] Culture culture)
647647
#else
648648
IFormatProvider formatProvider = culture;
649649
#endif
650-
return UnitParser.ParseUnit<ElectricCurrent>(str, formatProvider,
650+
return UnitParser.ParseUnit<ElectricCurrentUnit, ElectricCurrent>(str, formatProvider,
651651
delegate(string value, string unit, IFormatProvider formatProvider2)
652652
{
653653
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ElectricPotential.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ public static ElectricPotential Parse(string str, [CanBeNull] Culture culture)
573573
#else
574574
IFormatProvider formatProvider = culture;
575575
#endif
576-
return UnitParser.ParseUnit<ElectricPotential>(str, formatProvider,
576+
return UnitParser.ParseUnit<ElectricPotentialUnit, ElectricPotential>(str, formatProvider,
577577
delegate(string value, string unit, IFormatProvider formatProvider2)
578578
{
579579
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialAc.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ public static ElectricPotentialAc Parse(string str, [CanBeNull] Culture culture)
573573
#else
574574
IFormatProvider formatProvider = culture;
575575
#endif
576-
return UnitParser.ParseUnit<ElectricPotentialAc>(str, formatProvider,
576+
return UnitParser.ParseUnit<ElectricPotentialAcUnit, ElectricPotentialAc>(str, formatProvider,
577577
delegate(string value, string unit, IFormatProvider formatProvider2)
578578
{
579579
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialDc.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ public static ElectricPotentialDc Parse(string str, [CanBeNull] Culture culture)
573573
#else
574574
IFormatProvider formatProvider = culture;
575575
#endif
576-
return UnitParser.ParseUnit<ElectricPotentialDc>(str, formatProvider,
576+
return UnitParser.ParseUnit<ElectricPotentialDcUnit, ElectricPotentialDc>(str, formatProvider,
577577
delegate(string value, string unit, IFormatProvider formatProvider2)
578578
{
579579
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ElectricResistance.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ public static ElectricResistance Parse(string str, [CanBeNull] Culture culture)
536536
#else
537537
IFormatProvider formatProvider = culture;
538538
#endif
539-
return UnitParser.ParseUnit<ElectricResistance>(str, formatProvider,
539+
return UnitParser.ParseUnit<ElectricResistanceUnit, ElectricResistance>(str, formatProvider,
540540
delegate(string value, string unit, IFormatProvider formatProvider2)
541541
{
542542
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Energy.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ public static Energy Parse(string str, [CanBeNull] Culture culture)
869869
#else
870870
IFormatProvider formatProvider = culture;
871871
#endif
872-
return UnitParser.ParseUnit<Energy>(str, formatProvider,
872+
return UnitParser.ParseUnit<EnergyUnit, Energy>(str, formatProvider,
873873
delegate(string value, string unit, IFormatProvider formatProvider2)
874874
{
875875
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Flow.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -980,7 +980,7 @@ public static Flow Parse(string str, [CanBeNull] Culture culture)
980980
#else
981981
IFormatProvider formatProvider = culture;
982982
#endif
983-
return UnitParser.ParseUnit<Flow>(str, formatProvider,
983+
return UnitParser.ParseUnit<FlowUnit, Flow>(str, formatProvider,
984984
delegate(string value, string unit, IFormatProvider formatProvider2)
985985
{
986986
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Force.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ public static Force Parse(string str, [CanBeNull] Culture culture)
721721
#else
722722
IFormatProvider formatProvider = culture;
723723
#endif
724-
return UnitParser.ParseUnit<Force>(str, formatProvider,
724+
return UnitParser.ParseUnit<ForceUnit, Force>(str, formatProvider,
725725
delegate(string value, string unit, IFormatProvider formatProvider2)
726726
{
727727
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ForceChangeRate.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ public static ForceChangeRate Parse(string str, [CanBeNull] Culture culture)
795795
#else
796796
IFormatProvider formatProvider = culture;
797797
#endif
798-
return UnitParser.ParseUnit<ForceChangeRate>(str, formatProvider,
798+
return UnitParser.ParseUnit<ForceChangeRateUnit, ForceChangeRate>(str, formatProvider,
799799
delegate(string value, string unit, IFormatProvider formatProvider2)
800800
{
801801
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/ForcePerLength.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ public static ForcePerLength Parse(string str, [CanBeNull] Culture culture)
684684
#else
685685
IFormatProvider formatProvider = culture;
686686
#endif
687-
return UnitParser.ParseUnit<ForcePerLength>(str, formatProvider,
687+
return UnitParser.ParseUnit<ForcePerLengthUnit, ForcePerLength>(str, formatProvider,
688688
delegate(string value, string unit, IFormatProvider formatProvider2)
689689
{
690690
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Frequency.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ public static Frequency Parse(string str, [CanBeNull] Culture culture)
684684
#else
685685
IFormatProvider formatProvider = culture;
686686
#endif
687-
return UnitParser.ParseUnit<Frequency>(str, formatProvider,
687+
return UnitParser.ParseUnit<FrequencyUnit, Frequency>(str, formatProvider,
688688
delegate(string value, string unit, IFormatProvider formatProvider2)
689689
{
690690
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Information.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1350,7 +1350,7 @@ public static Information Parse(string str, [CanBeNull] Culture culture)
13501350
#else
13511351
IFormatProvider formatProvider = culture;
13521352
#endif
1353-
return UnitParser.ParseUnit<Information>(str, formatProvider,
1353+
return UnitParser.ParseUnit<InformationUnit, Information>(str, formatProvider,
13541354
delegate(string value, string unit, IFormatProvider formatProvider2)
13551355
{
13561356
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/KinematicViscosity.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ public static KinematicViscosity Parse(string str, [CanBeNull] Culture culture)
684684
#else
685685
IFormatProvider formatProvider = culture;
686686
#endif
687-
return UnitParser.ParseUnit<KinematicViscosity>(str, formatProvider,
687+
return UnitParser.ParseUnit<KinematicViscosityUnit, KinematicViscosity>(str, formatProvider,
688688
delegate(string value, string unit, IFormatProvider formatProvider2)
689689
{
690690
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Length.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@ public static Length Parse(string str, [CanBeNull] Culture culture)
10171017
#else
10181018
IFormatProvider formatProvider = culture;
10191019
#endif
1020-
return UnitParser.ParseUnit<Length>(str, formatProvider,
1020+
return UnitParser.ParseUnit<LengthUnit, Length>(str, formatProvider,
10211021
delegate(string value, string unit, IFormatProvider formatProvider2)
10221022
{
10231023
double parsedValue = double.Parse(value, formatProvider2);

UnitsNet/GeneratedCode/UnitClasses/Level.g.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ public static Level Parse(string str, [CanBeNull] Culture culture)
470470
#else
471471
IFormatProvider formatProvider = culture;
472472
#endif
473-
return UnitParser.ParseUnit<Level>(str, formatProvider,
473+
return UnitParser.ParseUnit<LevelUnit, Level>(str, formatProvider,
474474
delegate(string value, string unit, IFormatProvider formatProvider2)
475475
{
476476
double parsedValue = double.Parse(value, formatProvider2);

0 commit comments

Comments
 (0)