public static bool TryParseSpeed(string s, out KilometerPerHour result) { result = (KilometerPerHour)double.MaxValue; if (string.IsNullOrWhiteSpace(s) || (int)s[0] != 48 && (int)s[0] != 49 && ((int)s[0] != 50 && (int)s[0] != 51) && ((int)s[0] != 52 && (int)s[0] != 53 && ((int)s[0] != 54 && (int)s[0] != 55)) && ((int)s[0] != 56 && (int)s[0] != 57) || s.Contains(",")) { return(false); } double result1; if (double.TryParse(s, NumberStyles.Any, (IFormatProvider)CultureInfo.InvariantCulture, out result1)) { result = (KilometerPerHour)result1; } if (KilometerPerHour.TryParse(s, out result)) { return(true); } MilesPerHour result2; if (MilesPerHour.TryParse(s, out result2)) { result = (KilometerPerHour)result2; return(true); } Knots result3; if (!Knots.TryParse(s, out result3)) { return(false); } result = (KilometerPerHour)result3; return(true); }
/// <summary> /// Tries to parse a speed value from a given tag-value. /// </summary> /// <param name="s"></param> /// <param name="result"></param> /// <returns></returns> public static bool TryParseSpeed(string s, out KilometerPerHour result) { result = double.MaxValue; if (string.IsNullOrWhiteSpace(s)) { return(false); } if (s[0] != '0' && s[0] != '1' && s[0] != '2' && s[0] != '3' && s[0] != '4' && s[0] != '5' && s[0] != '6' && s[0] != '7' && s[0] != '8' && s[0] != '9') { // performance inprovement, quick negative answer. return(false); } if (s.Contains(',')) { // refuse comma as a decimal seperator or anywhere else in the number. return(false); } // try regular speed: convention in OSM is km/h in this case. double kmphDouble; if (double.TryParse(s, NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out kmphDouble)) { result = kmphDouble; } // try km/h if (KilometerPerHour.TryParse(s, out result)) { return(true); } // try mph. MilesPerHour resultMph; if (MilesPerHour.TryParse(s, out resultMph)) { result = resultMph; return(true); } // try knots. Knots resultKnots; if (Knots.TryParse(s, out resultKnots)) { result = resultKnots; return(true); } return(false); }