diff --git a/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/BenchmarkRunner.csproj b/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/BenchmarkRunner.csproj
index d41f87f394..f691b718f6 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/BenchmarkRunner.csproj
+++ b/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/BenchmarkRunner.csproj
@@ -2,13 +2,13 @@
Exe
- net7.0
+ net10.0
enable
enable
-
+
diff --git a/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/StringIsANumberBenchmark.cs b/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/StringIsANumberBenchmark.cs
index 3e242ab600..c6426d125e 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/StringIsANumberBenchmark.cs
+++ b/strings-csharp/IdentifyIfStringIsANumber/BenchmarkRunner/StringIsANumberBenchmark.cs
@@ -8,47 +8,48 @@ namespace BenchmarkRunner;
[MemoryDiagnoser]
public class StringIsANumberBenchmark
{
- private string value = "123456789";
+ [Params("123456789", "a12345678")]
+ public string Value { get; set; } = string.Empty;
[Benchmark]
public void IntTryParse()
{
- StringIsANumberChecker.IntTryParse(value);
+ StringIsANumberChecker.IntTryParse(Value);
}
[Benchmark]
public void DoubleTryParse()
{
- StringIsANumberChecker.DoubleTryParse(value);
+ StringIsANumberChecker.DoubleTryParse(Value);
}
[Benchmark]
public void UsingRegex()
{
- StringIsANumberChecker.UsingRegex(value);
+ StringIsANumberChecker.UsingRegex(Value);
}
[Benchmark]
public void UsingCompiledRegex()
{
- StringIsANumberChecker.UsingCompiledRegex(value);
+ StringIsANumberChecker.UsingCompiledRegex(Value);
}
[Benchmark]
public void UsingCharIsDigit()
{
- StringIsANumberChecker.UsingCharIsDigit(value);
+ StringIsANumberChecker.UsingCharIsDigit(Value);
}
[Benchmark]
public void UsingCharIsDigitWithForeach()
{
- StringIsANumberChecker.UsingCharIsDigitWithForeach(value);
+ StringIsANumberChecker.UsingCharIsDigitWithForeach(Value);
}
[Benchmark]
public void UsingCharIsBetween09()
{
- StringIsANumberChecker.UsingCharIsBetween09(value);
+ StringIsANumberChecker.UsingCharIsBetween09(Value);
}
}
diff --git a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/IdentifyIfAStringIsANumber.Tests.csproj b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/IdentifyIfAStringIsANumber.Tests.csproj
index 4eaa4bb8c9..e5f5cda2df 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/IdentifyIfAStringIsANumber.Tests.csproj
+++ b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/IdentifyIfAStringIsANumber.Tests.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net10.0
enable
enable
@@ -10,13 +10,13 @@
-
-
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/StringIsNumberTests.cs b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/StringIsNumberTests.cs
index 17685b4159..a032bafb60 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/StringIsNumberTests.cs
+++ b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber.Tests/StringIsNumberTests.cs
@@ -9,6 +9,7 @@ public class StringIsNumberTests
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingIntTryParseMethod_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.IntTryParse(value);
@@ -23,6 +24,7 @@ public void GivenAString_WhenUsingIntTryParseMethod_ThenTryToParseIt(string valu
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingCharIsDigit_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.UsingCharIsDigit(value);
@@ -37,6 +39,7 @@ public void GivenAString_WhenUsingCharIsDigit_ThenTryToParseIt(string value, boo
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingDoubleTryParse_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.DoubleTryParse(value);
@@ -51,6 +54,7 @@ public void GivenAString_WhenUsingDoubleTryParse_ThenTryToParseIt(string value,
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingRegex_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.UsingRegex(value);
@@ -65,6 +69,7 @@ public void GivenAString_WhenUsingRegex_ThenTryToParseIt(string value, bool expe
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingCompiledRegex_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.UsingCompiledRegex(value);
@@ -79,6 +84,7 @@ public void GivenAString_WhenUsingCompiledRegex_ThenTryToParseIt(string value, b
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingCharIsDigitWithForeach_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.UsingCharIsDigitWithForeach(value);
@@ -93,6 +99,7 @@ public void GivenAString_WhenUsingCharIsDigitWithForeach_ThenTryToParseIt(string
[InlineData("abc", false)]
[InlineData("414aa", false)]
[InlineData("١٢٣", false)]
+ [InlineData("", false)]
public void GivenAString_WhenUsingCharIsBetween09_ThenTryToParseIt(string value, bool expectedResult)
{
var result = StringIsANumberChecker.UsingCharIsBetween09(value);
diff --git a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/IdentifyIfAStringIsANumber.csproj b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/IdentifyIfAStringIsANumber.csproj
index f02677bf64..dfb40caafc 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/IdentifyIfAStringIsANumber.csproj
+++ b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/IdentifyIfAStringIsANumber.csproj
@@ -2,7 +2,7 @@
Exe
- net7.0
+ net10.0
enable
enable
diff --git a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/Program.cs b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/Program.cs
index af3143724a..dc1ab0c7ed 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/Program.cs
+++ b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/Program.cs
@@ -25,8 +25,26 @@
Console.WriteLine($" * {item,-15} ====> {StringIsANumberChecker.UsingRegex(item)}");
}
-Console.WriteLine("Using Char.IdDigit:");
+Console.WriteLine("Using char.IsAsciiDigit():");
foreach (var item in values)
{
Console.WriteLine($" * {item,-15} ====> {StringIsANumberChecker.UsingCharIsDigit(item)}");
}
+
+Console.WriteLine("Using compiled Regex:");
+foreach (var item in values)
+{
+ Console.WriteLine($" * {item,-15} ====> {StringIsANumberChecker.UsingCompiledRegex(item)}");
+}
+
+Console.WriteLine("Using char.IsAsciiDigit() with foreach:");
+foreach (var item in values)
+{
+ Console.WriteLine($" * {item,-15} ====> {StringIsANumberChecker.UsingCharIsDigitWithForeach(item)}");
+}
+
+Console.WriteLine("Using character value comparison:");
+foreach (var item in values)
+{
+ Console.WriteLine($" * {item,-15} ====> {StringIsANumberChecker.UsingCharIsBetween09(item)}");
+}
diff --git a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/StringIsANumberChecker.cs b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/StringIsANumberChecker.cs
index 0a146a7ab4..ada676b4ab 100644
--- a/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/StringIsANumberChecker.cs
+++ b/strings-csharp/IdentifyIfStringIsANumber/IdentifyIfAStringIsANumber/StringIsANumberChecker.cs
@@ -12,7 +12,8 @@ public static bool IntTryParse(string stringValue)
public static bool DoubleTryParse(string stringValue)
{
- return double.TryParse(stringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out _);
+ return double.TryParse(stringValue, NumberStyles.Float | NumberStyles.AllowThousands,
+ CultureInfo.InvariantCulture, out _);
}
public static bool UsingRegex(string stringValue)
@@ -33,11 +34,14 @@ public static bool UsingCompiledRegex(string stringValue)
public static bool UsingCharIsDigit(string stringValue)
{
- return stringValue.All(char.IsAsciiDigit);
+ return !string.IsNullOrEmpty(stringValue) && stringValue.All(char.IsAsciiDigit);
}
public static bool UsingCharIsDigitWithForeach(string stringValue)
{
+ if (string.IsNullOrEmpty(stringValue))
+ return false;
+
foreach (var c in stringValue)
{
if (!char.IsAsciiDigit(c))
@@ -48,6 +52,9 @@ public static bool UsingCharIsDigitWithForeach(string stringValue)
public static bool UsingCharIsBetween09(string stringValue)
{
+ if (string.IsNullOrEmpty(stringValue))
+ return false;
+
foreach (var c in stringValue)
{
if (c is < '0' or > '9')