diff --git a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp.csproj b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp.csproj
index 2150e3797b..ed9781c223 100644
--- a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp.csproj
+++ b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net10.0
enable
enable
diff --git a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/Program.cs b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/Program.cs
index 191cb4da4f..58553e9acf 100644
--- a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/Program.cs
+++ b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/Program.cs
@@ -8,10 +8,19 @@
char singleChar = StringHelper.ConvertSingleCharacterStringToChar(singleCharString);
Console.WriteLine(singleChar);
+char firstChar = StringHelper.GetCharacterAtIndex(myString, 0);
+char lastChar = myString[^1];
+Console.WriteLine($"{firstChar} {lastChar}");
+
+if (StringHelper.TryConvertSingleCharacterStringToChar("AB", out char parsed))
+ Console.WriteLine(parsed);
+else
+ Console.WriteLine("Not a single character");
+
ReadOnlySpan charArrayReadOnlySpan = StringHelper.ConvertStringToCharArrayUsingReadOnlySpan(myString);
PrintArray(charArrayReadOnlySpan);
-string[] stringArray = { "C#", "is", "awesome" };
+string[] stringArray = ["C#", "is", "awesome"];
char[] combinedCharArray = StringHelper.ConvertStringArrayToCharArrayUsingLoop(stringArray);
PrintArray(combinedCharArray);
diff --git a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/StringHelper.cs b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/StringHelper.cs
index 57f2a62f03..294ce303c5 100644
--- a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/StringHelper.cs
+++ b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharp/StringHelper.cs
@@ -19,20 +19,30 @@ public static char ConvertSingleCharacterStringToChar(string inputString)
return char.Parse(inputString);
}
-public static char[] ConvertStringArrayToCharArrayUsingLoop(string[] stringArray)
-{
- var combinedString = new StringBuilder();
+ public static char GetCharacterAtIndex(string inputString, int index)
+ {
+ return inputString[index];
+ }
- foreach (var str in stringArray)
+ public static bool TryConvertSingleCharacterStringToChar(string? inputString, out char result)
{
- combinedString.Append(str);
+ return char.TryParse(inputString, out result);
}
- var result = new char[combinedString.Length];
- combinedString.CopyTo(0, result, 0, result.Length);
+ public static char[] ConvertStringArrayToCharArrayUsingLoop(string[] stringArray)
+ {
+ var combinedString = new StringBuilder();
- return result;
-}
+ foreach (var str in stringArray)
+ {
+ combinedString.Append(str);
+ }
+
+ var result = new char[combinedString.Length];
+ combinedString.CopyTo(0, result, 0, result.Length);
+
+ return result;
+ }
public static char[] ConvertStringArrayToCharArrayUsingLinq(string[] stringArray)
{
diff --git a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/ConvertingStringToCharArrayInCSharpTests.csproj b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/ConvertingStringToCharArrayInCSharpTests.csproj
index b93b3680e1..1f585b4a46 100644
--- a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/ConvertingStringToCharArrayInCSharpTests.csproj
+++ b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/ConvertingStringToCharArrayInCSharpTests.csproj
@@ -1,7 +1,7 @@
- net8.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/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/StringHelperTests.cs b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/StringHelperTests.cs
index e8fe3ac95f..93cb888237 100644
--- a/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/StringHelperTests.cs
+++ b/strings-csharp/ConvertingStringToCharArrayInCSharp/ConvertingStringToCharArrayInCSharpTests/StringHelperTests.cs
@@ -42,11 +42,55 @@ public void GivenStringArrayToCharArray_WhenValidInput_ThenReturnsCharArray()
Assert.Equal(InputString.ToCharArray(), resultLinq);
}
+ [Theory]
+ [InlineData("AB")]
+ [InlineData("")]
+ public void GivenStringToChar_WhenLengthIsNotOne_ThenThrowsFormatException(string inputString)
+ {
+ Assert.Throws(() => StringHelper.ConvertSingleCharacterStringToChar(inputString));
+ }
+
[Fact]
- public void GivenStringToChar_WhenInvalidInput_ThenThrowsArgumentException()
+ public void GivenStringToChar_WhenNull_ThenThrowsArgumentNullException()
{
- const string inputString = "AB";
+ Assert.Throws(() => StringHelper.ConvertSingleCharacterStringToChar(null!));
+ }
- Assert.Throws(() => StringHelper.ConvertSingleCharacterStringToChar(inputString));
+ [Fact]
+ public void GivenCharacterAtIndex_WhenIndexInRange_ThenReturnsThatChar()
+ {
+ Assert.Equal('H', StringHelper.GetCharacterAtIndex(InputString, 0));
+ Assert.Equal('W', StringHelper.GetCharacterAtIndex(InputString, 7));
+ }
+
+ [Fact]
+ public void GivenCharacterAtIndex_WhenStringIsEmpty_ThenThrowsIndexOutOfRangeException()
+ {
+ Assert.Throws(() => StringHelper.GetCharacterAtIndex(string.Empty, 0));
+ }
+
+ [Theory]
+ [InlineData("A", true)]
+ [InlineData("AB", false)]
+ [InlineData("", false)]
+ [InlineData(null, false)]
+ public void GivenTryConvert_WhenCalled_ThenReportsSuccessWithoutThrowing(string? inputString, bool expectedSuccess)
+ {
+ bool success = StringHelper.TryConvertSingleCharacterStringToChar(inputString, out char result);
+
+ Assert.Equal(expectedSuccess, success);
+ if (success)
+ Assert.Equal(inputString![0], result);
+ }
+
+ [Fact]
+ public void GivenEmoji_WhenConverted_ThenTwoCharsAndParseFails()
+ {
+ const string thumbsUp = "\U0001F44D";
+
+ Assert.Equal(2, thumbsUp.Length);
+ Assert.True(char.IsHighSurrogate(StringHelper.GetCharacterAtIndex(thumbsUp, 0)));
+ Assert.False(StringHelper.TryConvertSingleCharacterStringToChar(thumbsUp, out _));
+ Assert.Equal(0x1F44D, System.Text.Rune.GetRuneAt(thumbsUp, 0).Value);
}
}
\ No newline at end of file