diff --git a/UnitsNet.Tests/CustomCode/ParseTests.cs b/UnitsNet.Tests/CustomCode/ParseTests.cs index 2f55836dc9..b0ad83b559 100644 --- a/UnitsNet.Tests/CustomCode/ParseTests.cs +++ b/UnitsNet.Tests/CustomCode/ParseTests.cs @@ -164,6 +164,55 @@ public void TryParseLengthUnitUsEnglish(string s, bool expected) Assert.Equal(expected, actual); } + [Theory] + [InlineData("!")] + [InlineData("@")] + [InlineData("#")] + [InlineData("$")] + [InlineData("%")] + [InlineData("^")] + [InlineData("&")] + [InlineData("*")] + [InlineData("-")] + [InlineData("_")] + [InlineData("?")] + [InlineData("123")] + [InlineData(" ")] + public void TryParseLengthUnitAbbreviationSpecialCharacters(string s) + { + UnitSystem unitSystem = UnitSystem.GetCached("en-US"); + string abbrev = $"m{s}s"; + unitSystem.MapUnitToAbbreviation(UnitsNet.Units.LengthUnit.Meter, abbrev); + UnitsNet.Units.LengthUnit result; + bool actual = unitSystem.TryParse(abbrev, out result); + Assert.Equal(true, actual); + Assert.Equal(UnitsNet.Units.LengthUnit.Meter, result); + } + + [Theory] + [InlineData("!")] + [InlineData("@")] + [InlineData("#")] + [InlineData("$")] + [InlineData("%")] + [InlineData("^")] + [InlineData("&")] + [InlineData("*")] + [InlineData("-")] + [InlineData("_")] + [InlineData("?")] + [InlineData("123")] + [InlineData(" ")] + public void TryParseLengthSpecialCharacters(string s) + { + UnitSystem unitSystem = UnitSystem.GetCached("en-US"); + string abbrev = $"m{s}s"; + unitSystem.MapUnitToAbbreviation(UnitsNet.Units.LengthUnit.Meter, abbrev); + bool actual = Length.TryParse($"10 {abbrev}", out Length result); + Assert.Equal(true, actual); + Assert.Equal(Length.FromMeters(10d), result); + } + private static string AssertExceptionAndGetFullTypeName(Action code) { var exception = Assert.ThrowsAny(code); diff --git a/UnitsNet/CustomCode/UnitParser.cs b/UnitsNet/CustomCode/UnitParser.cs index d751149e51..0fcb003d46 100644 --- a/UnitsNet/CustomCode/UnitParser.cs +++ b/UnitsNet/CustomCode/UnitParser.cs @@ -29,15 +29,15 @@ namespace UnitsNet { - internal delegate TUnit ParseUnit(string value, string unit, IFormatProvider formatProvider = null); + internal delegate TQuantity ParseUnit(string value, string unit, IFormatProvider formatProvider = null); internal static class UnitParser { [SuppressMessage("ReSharper", "UseStringInterpolation")] - internal static TUnit ParseUnit([NotNull] string str, + internal static TQuantity ParseUnit([NotNull] string str, [CanBeNull] IFormatProvider formatProvider, - [NotNull] ParseUnit parseUnit, - [NotNull] Func add) + [NotNull] ParseUnit parseUnit, + [NotNull] Func add) { if (str == null) throw new ArgumentNullException(nameof(str)); if (parseUnit == null) throw new ArgumentNullException(nameof(parseUnit)); @@ -54,15 +54,23 @@ internal static TUnit ParseUnit([NotNull] string str, const string exponentialRegex = @"(?:[eE][-+]?\d+)?)"; + string[] unitAbbreviations = UnitSystem.GetCached(formatProvider) + .GetAllAbbreviations(typeof(TQuantityEnum)) + .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 + .Select(Regex.Escape) // Escape special regex characters + .ToArray(); + + string unitsRegex = $"({String.Join("|", unitAbbreviations)})"; + string regexString = string.Format(@"(?:\s*(?[-+]?{0}{1}{2}{3})?{4}{5}", numRegex, // capture base (integral) Quantity value exponentialRegex, // capture exponential (if any), end of Quantity capturing @"\s?", // ignore whitespace (allows both "1kg", "1 kg") - @"(?[^\s\d,]+)", // capture Unit (non-whitespace) input + $@"(?{unitsRegex})", // capture Unit by list of abbreviations @"(and)?,?", // allow "and" & "," separators between quantities @"(?[a-z]*)?"); // capture invalid input - List quantities = ParseWithRegex(regexString, str, parseUnit, formatProvider); + List quantities = ParseWithRegex(regexString, str, parseUnit, formatProvider); if (quantities.Count == 0) { throw new ArgumentException( @@ -74,14 +82,14 @@ internal static TUnit ParseUnit([NotNull] string str, /// /// Parse a string given a particular regular expression. - /// + /// /// Error parsing string. - private static List ParseWithRegex(string regexString, string str, ParseUnit parseUnit, + private static List ParseWithRegex(string regexString, string str, ParseUnit parseUnit, IFormatProvider formatProvider = null) { var regex = new Regex(regexString); MatchCollection matches = regex.Matches(str.Trim()); - var converted = new List(); + var converted = new List(); foreach (Match match in matches) { @@ -121,4 +129,4 @@ private static List ParseWithRegex(string regexString, string str, return converted; } } -} \ No newline at end of file +} diff --git a/UnitsNet/CustomCode/UnitSystem.cs b/UnitsNet/CustomCode/UnitSystem.cs index ee0f17b1cf..7a111a333a 100644 --- a/UnitsNet/CustomCode/UnitSystem.cs +++ b/UnitsNet/CustomCode/UnitSystem.cs @@ -445,6 +445,27 @@ public string[] GetAllAbbreviations(Type unitType, int unitValue) : GetCached(FallbackCulture).GetAllAbbreviations(unitType, unitValue); } + /// + /// Get all abbreviations for unit. + /// + /// Enum type for unit. + /// Enum value for unit. + /// Unit abbreviations associated with unit. + [PublicAPI] + public string[] GetAllAbbreviations(Type unitType) + { + Dictionary> unitValueToAbbrevs; + if (_unitTypeToUnitValueToAbbrevs.TryGetValue(unitType, out unitValueToAbbrevs)) + { + return unitValueToAbbrevs.Values.SelectMany(x => x).ToArray(); + } + + // Fall back to default culture + return IsFallbackCulture + ? new[] {$"(no abbreviations for {unitType.Name})"} + : GetCached(FallbackCulture).GetAllAbbreviations(unitType); + } + private void LoadDefaultAbbreviations([NotNull] IFormatProvider culture) { foreach (UnitLocalization localization in DefaultLocalizations) @@ -494,4 +515,4 @@ private static object GetDefault(Type type) : null; } } -} \ No newline at end of file +} diff --git a/UnitsNet/GeneratedCode/UnitClasses/Acceleration.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Acceleration.g.cs index 7c919d851f..a06f182681 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Acceleration.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Acceleration.g.cs @@ -647,7 +647,7 @@ public static Acceleration Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/AmplitudeRatio.g.cs b/UnitsNet/GeneratedCode/UnitClasses/AmplitudeRatio.g.cs index 1e060aee86..5bc8eb9c94 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/AmplitudeRatio.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/AmplitudeRatio.g.cs @@ -544,7 +544,7 @@ public static AmplitudeRatio Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Angle.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Angle.g.cs index 830728c8ce..226e70d803 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Angle.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Angle.g.cs @@ -869,7 +869,7 @@ public static Angle Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ApparentPower.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ApparentPower.g.cs index 58f9ea4439..4029093994 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ApparentPower.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ApparentPower.g.cs @@ -499,7 +499,7 @@ public static ApparentPower Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Area.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Area.g.cs index b02514031e..7518cf7c5a 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Area.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Area.g.cs @@ -832,7 +832,7 @@ public static Area Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/BrakeSpecificFuelConsumption.g.cs b/UnitsNet/GeneratedCode/UnitClasses/BrakeSpecificFuelConsumption.g.cs index acbe07dc87..f1efc91d8e 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/BrakeSpecificFuelConsumption.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/BrakeSpecificFuelConsumption.g.cs @@ -499,7 +499,7 @@ public static BrakeSpecificFuelConsumption Parse(string str, [CanBeNull] Culture #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Density.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Density.g.cs index 1a6d2ff83f..b116b787f9 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Density.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Density.g.cs @@ -1683,7 +1683,7 @@ public static Density Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Duration.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Duration.g.cs index 63e58a1ebd..7f80f56e2d 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Duration.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Duration.g.cs @@ -758,7 +758,7 @@ public static Duration Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/DynamicViscosity.g.cs b/UnitsNet/GeneratedCode/UnitClasses/DynamicViscosity.g.cs index 4723f63514..263f24d60f 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/DynamicViscosity.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/DynamicViscosity.g.cs @@ -573,7 +573,7 @@ public static DynamicViscosity Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ElectricAdmittance.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ElectricAdmittance.g.cs index b146546993..cf2a2e871f 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ElectricAdmittance.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ElectricAdmittance.g.cs @@ -536,7 +536,7 @@ public static ElectricAdmittance Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ElectricCurrent.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ElectricCurrent.g.cs index e147e53060..dff72c0770 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ElectricCurrent.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ElectricCurrent.g.cs @@ -647,7 +647,7 @@ public static ElectricCurrent Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ElectricPotential.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ElectricPotential.g.cs index ab093d0f7a..62db3ed3d8 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ElectricPotential.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ElectricPotential.g.cs @@ -573,7 +573,7 @@ public static ElectricPotential Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialAc.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialAc.g.cs index c1cd7a1891..6ca193ce15 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialAc.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialAc.g.cs @@ -573,7 +573,7 @@ public static ElectricPotentialAc Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialDc.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialDc.g.cs index 17824a68b8..511579e35b 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialDc.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ElectricPotentialDc.g.cs @@ -573,7 +573,7 @@ public static ElectricPotentialDc Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ElectricResistance.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ElectricResistance.g.cs index 8300dfc8a1..5d89ccca59 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ElectricResistance.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ElectricResistance.g.cs @@ -536,7 +536,7 @@ public static ElectricResistance Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Energy.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Energy.g.cs index 6cefda89be..cf5a5a99b0 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Energy.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Energy.g.cs @@ -869,7 +869,7 @@ public static Energy Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Flow.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Flow.g.cs index 18c754d242..0fb32a41ef 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Flow.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Flow.g.cs @@ -980,7 +980,7 @@ public static Flow Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Force.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Force.g.cs index a6bbf14980..beee1fefbb 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Force.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Force.g.cs @@ -721,7 +721,7 @@ public static Force Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ForceChangeRate.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ForceChangeRate.g.cs index e1882f7d8f..989da91d4e 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ForceChangeRate.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ForceChangeRate.g.cs @@ -795,7 +795,7 @@ public static ForceChangeRate Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ForcePerLength.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ForcePerLength.g.cs index 4dcbdf8b01..c68c3ac497 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ForcePerLength.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ForcePerLength.g.cs @@ -684,7 +684,7 @@ public static ForcePerLength Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Frequency.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Frequency.g.cs index f332754c52..9712ea5e18 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Frequency.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Frequency.g.cs @@ -684,7 +684,7 @@ public static Frequency Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Information.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Information.g.cs index 9c00286df7..414970966e 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Information.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Information.g.cs @@ -1350,7 +1350,7 @@ public static Information Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/KinematicViscosity.g.cs b/UnitsNet/GeneratedCode/UnitClasses/KinematicViscosity.g.cs index 7300a09d73..286537609d 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/KinematicViscosity.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/KinematicViscosity.g.cs @@ -684,7 +684,7 @@ public static KinematicViscosity Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Length.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Length.g.cs index 4f66263070..891451d77a 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Length.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Length.g.cs @@ -1017,7 +1017,7 @@ public static Length Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Level.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Level.g.cs index 22bda2eda2..145fd0e07d 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Level.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Level.g.cs @@ -470,7 +470,7 @@ public static Level Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Mass.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Mass.g.cs index dfb9bc1acd..0c79cfd6fe 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Mass.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Mass.g.cs @@ -1091,7 +1091,7 @@ public static Mass Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/MassFlow.g.cs b/UnitsNet/GeneratedCode/UnitClasses/MassFlow.g.cs index d22136f396..1a61e22862 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/MassFlow.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/MassFlow.g.cs @@ -832,7 +832,7 @@ public static MassFlow Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Molarity.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Molarity.g.cs index e7ee23afce..796b806fed 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Molarity.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Molarity.g.cs @@ -684,7 +684,7 @@ public static Molarity Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Power.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Power.g.cs index 0529f428cf..c42390973c 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Power.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Power.g.cs @@ -980,7 +980,7 @@ public static Power Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/PowerRatio.g.cs b/UnitsNet/GeneratedCode/UnitClasses/PowerRatio.g.cs index 33b4aeb4c4..4c9ba2b798 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/PowerRatio.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/PowerRatio.g.cs @@ -470,7 +470,7 @@ public static PowerRatio Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Pressure.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Pressure.g.cs index 4de826394b..77cb364ca3 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Pressure.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Pressure.g.cs @@ -1758,7 +1758,7 @@ public static Pressure Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/PressureChangeRate.g.cs b/UnitsNet/GeneratedCode/UnitClasses/PressureChangeRate.g.cs index b6006b5fcc..201e261af8 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/PressureChangeRate.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/PressureChangeRate.g.cs @@ -536,7 +536,7 @@ public static PressureChangeRate Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Ratio.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Ratio.g.cs index 4c68f2fa8b..d972a8755c 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Ratio.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Ratio.g.cs @@ -610,7 +610,7 @@ public static Ratio Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ReactivePower.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ReactivePower.g.cs index c08f539b9d..7b28d26484 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ReactivePower.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ReactivePower.g.cs @@ -499,7 +499,7 @@ public static ReactivePower Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/RotationalAcceleration.g.cs b/UnitsNet/GeneratedCode/UnitClasses/RotationalAcceleration.g.cs index f4ed54bb65..98fc4dba1a 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/RotationalAcceleration.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/RotationalAcceleration.g.cs @@ -462,7 +462,7 @@ public static RotationalAcceleration Parse(string str, [CanBeNull] Culture cultu #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/RotationalSpeed.g.cs b/UnitsNet/GeneratedCode/UnitClasses/RotationalSpeed.g.cs index faa0282354..169c57ab3d 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/RotationalSpeed.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/RotationalSpeed.g.cs @@ -869,7 +869,7 @@ public static RotationalSpeed Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/SpecificEnergy.g.cs b/UnitsNet/GeneratedCode/UnitClasses/SpecificEnergy.g.cs index e4a8f5fbda..68e958f97c 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/SpecificEnergy.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/SpecificEnergy.g.cs @@ -684,7 +684,7 @@ public static SpecificEnergy Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/SpecificWeight.g.cs b/UnitsNet/GeneratedCode/UnitClasses/SpecificWeight.g.cs index bd7a296a9e..b81fdc6ad2 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/SpecificWeight.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/SpecificWeight.g.cs @@ -980,7 +980,7 @@ public static SpecificWeight Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Speed.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Speed.g.cs index f3061b347e..e9a8a1fffa 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Speed.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Speed.g.cs @@ -1165,7 +1165,7 @@ public static Speed Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Temperature.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Temperature.g.cs index 24ec685eb3..266c6d6dd0 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Temperature.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Temperature.g.cs @@ -642,7 +642,7 @@ public static Temperature Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/TemperatureChangeRate.g.cs b/UnitsNet/GeneratedCode/UnitClasses/TemperatureChangeRate.g.cs index 2eecb451d2..284df26863 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/TemperatureChangeRate.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/TemperatureChangeRate.g.cs @@ -721,7 +721,7 @@ public static TemperatureChangeRate Parse(string str, [CanBeNull] Culture cultur #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/TemperatureDelta.g.cs b/UnitsNet/GeneratedCode/UnitClasses/TemperatureDelta.g.cs index fda825b91d..3ecaeb3e4a 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/TemperatureDelta.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/TemperatureDelta.g.cs @@ -684,7 +684,7 @@ public static TemperatureDelta Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/ThermalResistance.g.cs b/UnitsNet/GeneratedCode/UnitClasses/ThermalResistance.g.cs index 043348a2c8..61cad8df42 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/ThermalResistance.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/ThermalResistance.g.cs @@ -573,7 +573,7 @@ public static ThermalResistance Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Torque.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Torque.g.cs index 2798c8bdf9..dea0f99b0b 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Torque.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Torque.g.cs @@ -980,7 +980,7 @@ public static Torque Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/VitaminA.g.cs b/UnitsNet/GeneratedCode/UnitClasses/VitaminA.g.cs index acc9593c7c..db8a7d590f 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/VitaminA.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/VitaminA.g.cs @@ -425,7 +425,7 @@ public static VitaminA Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/GeneratedCode/UnitClasses/Volume.g.cs b/UnitsNet/GeneratedCode/UnitClasses/Volume.g.cs index 8929d1f75f..3cc9d2f4f9 100644 --- a/UnitsNet/GeneratedCode/UnitClasses/Volume.g.cs +++ b/UnitsNet/GeneratedCode/UnitClasses/Volume.g.cs @@ -1537,7 +1537,7 @@ public static Volume Parse(string str, [CanBeNull] Culture culture) #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit(str, formatProvider, + return UnitParser.ParseUnit(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2); diff --git a/UnitsNet/Scripts/Include-GenerateUnitClassSourceCode.ps1 b/UnitsNet/Scripts/Include-GenerateUnitClassSourceCode.ps1 index ad9885a7a7..42cfd6583b 100644 --- a/UnitsNet/Scripts/Include-GenerateUnitClassSourceCode.ps1 +++ b/UnitsNet/Scripts/Include-GenerateUnitClassSourceCode.ps1 @@ -485,7 +485,7 @@ namespace UnitsNet #else IFormatProvider formatProvider = culture; #endif - return UnitParser.ParseUnit<$className>(str, formatProvider, + return UnitParser.ParseUnit<$unitEnumName, $className>(str, formatProvider, delegate(string value, string unit, IFormatProvider formatProvider2) { double parsedValue = double.Parse(value, formatProvider2);