From 4cce4e6a0c9d4fa997b1e8a1f4afa760a1d926d8 Mon Sep 17 00:00:00 2001 From: Stoyan Zlatev Date: Thu, 12 Oct 2023 12:42:03 +0200 Subject: [PATCH] extension method for parsing doubles --- .../Ui/GenesisToolBox/GenesisToolBox.csproj | 1 + .../Infrastructure/ParseExtensions.cs | 27 +++++++++++++++++++ .../Infrastructure/TempMeterModels.cs | 23 +++++++--------- 3 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 Common/Ui/GenesisToolBox/Infrastructure/ParseExtensions.cs diff --git a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj index f8786c75..04b57624 100644 --- a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj +++ b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj @@ -430,6 +430,7 @@ + diff --git a/Common/Ui/GenesisToolBox/Infrastructure/ParseExtensions.cs b/Common/Ui/GenesisToolBox/Infrastructure/ParseExtensions.cs new file mode 100644 index 00000000..1ed6175c --- /dev/null +++ b/Common/Ui/GenesisToolBox/Infrastructure/ParseExtensions.cs @@ -0,0 +1,27 @@ +namespace Xylem.Common.Ui.GenesisToolBox.Infrastructure +{ + using System.Globalization; + using System.Threading; + + internal static class ParseExtensions + { + private static readonly NumberStyles any = NumberStyles.Any; + private static readonly CultureInfo de = new CultureInfo("de-DE"); + private static readonly CultureInfo us = new CultureInfo("en-US"); + private static bool IsDECulture => Thread.CurrentThread.CurrentCulture.Name.ToLower().Contains("de"); + + internal static bool TryParse(this string stringValue, out double value) + { + if (IsDECulture) + { + return double.TryParse(stringValue, any, de, out value) + || double.TryParse(stringValue, any, us, out value); + } + else + { + return double.TryParse(stringValue, any, us, out value) + || double.TryParse(stringValue, any, de, out value); + } + } + } +} diff --git a/Common/Ui/GenesisToolBox/Infrastructure/TempMeterModels.cs b/Common/Ui/GenesisToolBox/Infrastructure/TempMeterModels.cs index f31dfed7..43f31c0a 100644 --- a/Common/Ui/GenesisToolBox/Infrastructure/TempMeterModels.cs +++ b/Common/Ui/GenesisToolBox/Infrastructure/TempMeterModels.cs @@ -88,15 +88,12 @@ private const string MESSUREMENTS_FILE = @"_messurements.txt"; private const string AGGREGATIONS_FILE = @"_aggregations.txt"; private const string BACKWARDS_FILE = @"_backwards.txt"; - private const NumberStyles ANY = NumberStyles.Any; private readonly string pcbId; private readonly string messurementsFile; private readonly string aggregationsFile; private readonly string backwardsFile; private readonly ITempMeterForm tempMeterForm; - private readonly CultureInfo en; - private readonly CultureInfo de; private TemperatureSource temperatureSource; private Timer longTimer; @@ -117,8 +114,6 @@ } this.temperatureSource = new TemperatureSource(); - this.en = new CultureInfo("en-US"); - this.de = new CultureInfo("de-DE"); } public void StartMessuring() @@ -266,8 +261,8 @@ try { - var tParsed = double.TryParse(tString, ANY, this.en, out currentT) || double.TryParse(tString, ANY, this.de, out currentT); - var tofParsed = double.TryParse(tofString, ANY, this.en, out currentTOF) || double.TryParse(tofString, ANY, this.de, out currentTOF); + var tParsed = tString.TryParse(out currentT); + var tofParsed = tofString.TryParse(out currentTOF); if (!tParsed || !tofParsed) { @@ -336,11 +331,11 @@ var seconds = default(int); var pcbParsed = int.TryParse(pcbString, out pcbId); - var tParsed = double.TryParse(avgTString, ANY, this.en, out avgT) || double.TryParse(avgTString, ANY, this.de, out avgT); - var dtParsed = double.TryParse(difTString, ANY, this.en, out difT) || double.TryParse(difTString, ANY, this.de, out difT); - var secParsed = int.TryParse(secondsString, ANY, this.en, out seconds) || int.TryParse(secondsString, ANY, this.de, out seconds); - var tofParsed = double.TryParse(avgTOFString, ANY, this.en, out avgTOF) || double.TryParse(avgTOFString, ANY, this.de, out avgTOF); - var dtofParsed = double.TryParse(difTOFString, ANY, this.en, out difTOF) || double.TryParse(difTOFString, ANY, this.de, out difTOF); + var tParsed = avgTString.TryParse(out avgT); + var dtParsed = difTString.TryParse(out difT); + var secParsed = int.TryParse(secondsString, out seconds) || int.TryParse(secondsString, out seconds); + var tofParsed = avgTOFString.TryParse(out avgTOF); + var dtofParsed = difTOFString.TryParse(out difTOF); if (!pcbParsed || !tParsed || !tofParsed || !dtParsed || !dtofParsed) { @@ -611,8 +606,8 @@ var avgTOF = default(double); var pcbParsed = int.TryParse(pcbString, out pcbId); - var tParsed = double.TryParse(avgTString, ANY, this.en, out avgT) || double.TryParse(avgTString, ANY, this.de, out avgT); - var tofParsed = double.TryParse(avgTOFString, ANY, this.en, out avgTOF) || double.TryParse(avgTOFString, ANY, this.de, out avgTOF); + var tParsed = avgTString.TryParse(out avgT); + var tofParsed = avgTOFString.TryParse(out avgTOF); if (!pcbParsed || !tParsed || !tofParsed) {