diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj
index 2082704286..dfb40caafc 100644
--- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj
+++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj
@@ -2,7 +2,9 @@
Exe
- net5.0
+ net10.0
+ enable
+ enable
diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs
index 9033525a46..33140b96ec 100644
--- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs
+++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs
@@ -1,80 +1,7 @@
-using System;
-using System.Linq;
+using ConvertStringToBoolean;
-namespace ConvertStringToBoolean
-{
- public class Program
- {
- public static void Main()
- {
- ToBooleanMethod();
+StringToBoolean.ToBooleanMethod();
- ParseMethod();
+StringToBoolean.ParseMethod();
- TryParseMethod();
- }
-
- public static void ToBooleanMethod()
- {
- string[] validString = { null, "true", "True", " true ", "false", "False", " false" };
-
- string[] invalidString = { "", string.Empty, "t", " yes ", "-1", "0", "1" };
-
- var values = validString.Concat(invalidString);
-
- foreach (var value in values)
- {
- try
- {
- Console.WriteLine($"Converted '{value}' to {Convert.ToBoolean(value)}.\n");
- }
- catch (FormatException)
- {
- Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n");
- }
- }
- }
-
- public static void ParseMethod()
- {
- string[] validString = { "true", "True", " true ", "false", "False", " false" };
-
- string[] invalidString = {null, "", string.Empty, "t", " yes ", "-1", "0", "1" };
-
- var values = validString.Concat(invalidString);
-
- foreach (var value in values)
- {
- try
- {
- Console.WriteLine($"Converted '{value}' to {bool.Parse(value)}.\n");
- }
- catch (Exception)
- {
- Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n");
- }
- }
- }
-
- public static void TryParseMethod()
- {
- string[] validString = { "true", "True", " true ", "false", "False", " false" };
-
- string[] invalidString = { null, "", string.Empty, "t", " yes ", "-1", "0", "1" };
-
- var values = validString.Concat(invalidString);
-
- foreach (var value in values)
- {
- if (bool.TryParse(value, out bool booleanValue))
- {
- Console.WriteLine($"Conversion successful: '{value}' to {booleanValue}.\n");
- }
- else
- {
- Console.WriteLine($"Conversion Failed: '{value}' to {booleanValue}.\n");
- }
- }
- }
- }
-}
+StringToBoolean.TryParseMethod();
diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/StringToBoolean.cs b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/StringToBoolean.cs
new file mode 100644
index 0000000000..a52abf3f6d
--- /dev/null
+++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/StringToBoolean.cs
@@ -0,0 +1,78 @@
+namespace ConvertStringToBoolean;
+
+public static class StringToBoolean
+{
+ public static void ToBooleanMethod()
+ {
+ string?[] validString = { null, "true", "True", " true ", "false", "False", " false" };
+
+ string[] invalidString = { "", string.Empty, "t", " yes ", "-1", "0", "1" };
+
+ var values = validString.Concat(invalidString);
+
+ foreach (var value in values)
+ {
+ try
+ {
+ Console.WriteLine($"Converted '{value}' to {Convert.ToBoolean(value)}.\n");
+ }
+ catch (FormatException)
+ {
+ Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n");
+ }
+ }
+ }
+
+ public static void ParseMethod()
+ {
+ string[] validString = { "true", "True", " true ", "false", "False", " false" };
+
+ string?[] invalidString = { null, "", string.Empty, "t", " yes ", "-1", "0", "1" };
+
+ var values = validString.Concat(invalidString);
+
+ foreach (var value in values)
+ {
+ try
+ {
+ Console.WriteLine($"Converted '{value}' to {bool.Parse(value!)}.\n");
+ }
+ catch (ArgumentNullException)
+ {
+ Console.WriteLine("Unable to convert null to a Boolean.\n");
+ }
+ catch (FormatException)
+ {
+ Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n");
+ }
+ }
+ }
+
+ public static void TryParseMethod()
+ {
+ string[] validString = { "true", "True", " true ", "false", "False", " false" };
+
+ string?[] invalidString = { null, "", string.Empty, "t", " yes ", "-1", "0", "1" };
+
+ var values = validString.Concat(invalidString);
+
+ foreach (var value in values)
+ {
+ if (bool.TryParse(value, out bool booleanValue))
+ {
+ Console.WriteLine($"Conversion successful: '{value}' to {booleanValue}.\n");
+ }
+ else
+ {
+ Console.WriteLine($"Conversion Failed: '{value}' to {booleanValue}.\n");
+ }
+ }
+ }
+
+ public static bool? ToBoolOrNull(string? value) => value?.Trim().ToLowerInvariant() switch
+ {
+ "true" or "yes" or "y" or "1" or "on" => true,
+ "false" or "no" or "n" or "0" or "off" => false,
+ _ => null
+ };
+}
diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs
index 07bf8e5b43..574760d559 100644
--- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs
+++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs
@@ -1,3 +1,4 @@
+using ConvertStringToBoolean;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
@@ -13,6 +14,14 @@ public void GivenConvertToBoolean_WhenValid_ThenConversionSuccess()
Assert.AreEqual(true, Convert.ToBoolean("True"));
+ Assert.AreEqual(true, Convert.ToBoolean("TRUE"));
+
+ Assert.AreEqual(true, Convert.ToBoolean(" true "));
+
+ Assert.AreEqual(false, Convert.ToBoolean("false"));
+
+ Assert.AreEqual(false, Convert.ToBoolean("False"));
+
Assert.AreEqual(false, Convert.ToBoolean(" false "));
Assert.AreEqual(false, Convert.ToBoolean("False "));
@@ -23,19 +32,23 @@ public void GivenConvertToBoolean_WhenValid_ThenConversionSuccess()
[TestMethod]
public void GivenConvertToBoolean_WhenInvalid_ThenConversionThrowsException()
{
- Assert.ThrowsException(() => Convert.ToBoolean(""));
+ Assert.ThrowsExactly(() => Convert.ToBoolean(""));
+
+ Assert.ThrowsExactly(() => Convert.ToBoolean(string.Empty));
- Assert.ThrowsException(() => Convert.ToBoolean(string.Empty));
+ Assert.ThrowsExactly(() => Convert.ToBoolean("t"));
- Assert.ThrowsException(() => Convert.ToBoolean("t"));
+ Assert.ThrowsExactly(() => Convert.ToBoolean("y"));
- Assert.ThrowsException(() => Convert.ToBoolean(" yes "));
+ Assert.ThrowsExactly(() => Convert.ToBoolean("yes"));
- Assert.ThrowsException(() => Convert.ToBoolean("-1"));
+ Assert.ThrowsExactly(() => Convert.ToBoolean(" yes "));
- Assert.ThrowsException(() => Convert.ToBoolean("0"));
+ Assert.ThrowsExactly(() => Convert.ToBoolean("-1"));
- Assert.ThrowsException(() => Convert.ToBoolean("1"));
+ Assert.ThrowsExactly(() => Convert.ToBoolean("0"));
+
+ Assert.ThrowsExactly(() => Convert.ToBoolean("1"));
}
[TestMethod]
@@ -45,6 +58,14 @@ public void GivenboolParse_WhenValid_ThenConversionSuccess()
Assert.AreEqual(true, bool.Parse("True"));
+ Assert.AreEqual(true, bool.Parse("TRUE"));
+
+ Assert.AreEqual(true, bool.Parse(" true "));
+
+ Assert.AreEqual(false, bool.Parse("false"));
+
+ Assert.AreEqual(false, bool.Parse("False"));
+
Assert.AreEqual(false, bool.Parse(" false "));
Assert.AreEqual(false, bool.Parse("False "));
@@ -53,21 +74,25 @@ public void GivenboolParse_WhenValid_ThenConversionSuccess()
[TestMethod]
public void GivenboolParse_WhenInvalid_ThenConversionThrowsException()
{
- Assert.ThrowsException(() => bool.Parse(null));
+ Assert.ThrowsExactly(() => bool.Parse(null));
+
+ Assert.ThrowsExactly(() => bool.Parse(""));
+
+ Assert.ThrowsExactly(() => bool.Parse(string.Empty));
- Assert.ThrowsException(() => bool.Parse(""));
+ Assert.ThrowsExactly(() => bool.Parse("t"));
- Assert.ThrowsException(() => bool.Parse(string.Empty));
+ Assert.ThrowsExactly(() => bool.Parse("y"));
- Assert.ThrowsException(() => bool.Parse("t"));
+ Assert.ThrowsExactly(() => bool.Parse("yes"));
- Assert.ThrowsException(() => bool.Parse(" yes "));
+ Assert.ThrowsExactly(() => bool.Parse(" yes "));
- Assert.ThrowsException(() => bool.Parse("-1"));
+ Assert.ThrowsExactly(() => bool.Parse("-1"));
- Assert.ThrowsException(() => bool.Parse("0"));
+ Assert.ThrowsExactly(() => bool.Parse("0"));
- Assert.ThrowsException(() => bool.Parse("1"));
+ Assert.ThrowsExactly(() => bool.Parse("1"));
}
[TestMethod]
@@ -77,17 +102,25 @@ public void GivenboolTryParse_WhenValid_ThenConversionSuccess()
Assert.AreEqual(true, result1);
- Assert.IsTrue(bool.TryParse("True", out bool result2));
+ Assert.IsTrue(bool.TryParse("TRUE", out bool result2));
Assert.AreEqual(true, result2);
- Assert.IsTrue(bool.TryParse(" false ", out bool result3));
+ Assert.IsTrue(bool.TryParse(" true ", out bool result3));
- Assert.AreEqual(false, result3);
+ Assert.AreEqual(true, result3);
- Assert.IsTrue(bool.TryParse(" False ", out bool result4));
+ Assert.IsTrue(bool.TryParse("false", out bool result4));
Assert.AreEqual(false, result4);
+
+ Assert.IsTrue(bool.TryParse("False", out bool result5));
+
+ Assert.AreEqual(false, result5);
+
+ Assert.IsTrue(bool.TryParse(" false ", out bool result6));
+
+ Assert.AreEqual(false, result6);
}
[TestMethod]
@@ -105,21 +138,55 @@ public void GivenboolTryParse_WhenInvalid_ThenNoExceptionReturnFalse()
Assert.IsFalse(result3);
- Assert.IsFalse(bool.TryParse(" yes ", out bool result4));
+ Assert.IsFalse(bool.TryParse("y", out bool result4));
Assert.IsFalse(result4);
- Assert.IsFalse(bool.TryParse("-1", out bool result5));
+ Assert.IsFalse(bool.TryParse("yes", out bool result5));
Assert.IsFalse(result5);
- Assert.IsFalse(bool.TryParse("0", out bool result6));
+ Assert.IsFalse(bool.TryParse("-1", out bool result6));
Assert.IsFalse(result6);
- Assert.IsFalse(bool.TryParse("1", out bool result7));
+ Assert.IsFalse(bool.TryParse("0", out bool result7));
Assert.IsFalse(result7);
+
+ Assert.IsFalse(bool.TryParse("1", out bool result8));
+
+ Assert.IsFalse(result8);
+ }
+
+ [TestMethod]
+ public void GivenToBoolOrNull_WhenRecognisedTrueText_ThenReturnsTrue()
+ {
+ Assert.AreEqual(true, StringToBoolean.ToBoolOrNull("1"));
+
+ Assert.AreEqual(true, StringToBoolean.ToBoolOrNull("yes"));
+
+ Assert.AreEqual(true, StringToBoolean.ToBoolOrNull("Y"));
+
+ Assert.AreEqual(true, StringToBoolean.ToBoolOrNull(" ON "));
+ }
+
+ [TestMethod]
+ public void GivenToBoolOrNull_WhenRecognisedFalseText_ThenReturnsFalse()
+ {
+ Assert.AreEqual(false, StringToBoolean.ToBoolOrNull("0"));
+
+ Assert.AreEqual(false, StringToBoolean.ToBoolOrNull("no"));
+
+ Assert.AreEqual(false, StringToBoolean.ToBoolOrNull("off"));
+ }
+
+ [TestMethod]
+ public void GivenToBoolOrNull_WhenUnrecognisedText_ThenReturnsNull()
+ {
+ Assert.IsNull(StringToBoolean.ToBoolOrNull(null));
+
+ Assert.IsNull(StringToBoolean.ToBoolOrNull("maybe"));
}
}
}
diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj
index 5c45455c06..bdd3d5ba9f 100644
--- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj
+++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj
@@ -1,16 +1,20 @@
- net5.0
+ net10.0
false
-
-
-
-
+
+
+
+
+
+
+
+