Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using BenchmarkDotNet.Attributes;

namespace ConvertCharArray2String.Benchmarks;

[MemoryDiagnoser]
public class CharArrayToStringBenchmarks
{
private char[] _charArray = [];

[Params(9, 1000)]
public int Length { get; set; }

[GlobalSetup]
public void Setup() =>
_charArray = Enumerable.Range(0, Length).Select(i => (char)('a' + i % 26)).ToArray();

[Benchmark(Baseline = true)]
public string StringConstructor() => new string(_charArray);

[Benchmark]
public string StringConcat() => string.Concat(_charArray);

[Benchmark]
public string StringJoin() => string.Join("", _charArray);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.15.8" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
using BenchmarkDotNet.Running;
using ConvertCharArray2String.Benchmarks;

BenchmarkRunner.Run<CharArrayToStringBenchmarks>(args: args);
59 changes: 45 additions & 14 deletions strings-csharp/ConvertCharArray2String/ConvertCharArray2String.sln
Original file line number Diff line number Diff line change
@@ -1,31 +1,62 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.1.31911.260
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2String", "ConvertCharArray2String\ConvertCharArray2String.csproj", "{F21AE7B0-5961-431F-9573-CF567C362730}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2String", "ConvertCharArray2String\ConvertCharArray2String.csproj", "{CC387591-8080-46EE-8045-62FB77775F15}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2StringTests", "ConvertCharArray2StringTests\ConvertCharArray2StringTests.csproj", "{8359457A-7DEA-438D-9A3B-8725C41729C8}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2StringTests", "ConvertCharArray2StringTests\ConvertCharArray2StringTests.csproj", "{269D6433-F548-49D7-AE0A-346ADBDEAFF3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2String.Benchmarks", "ConvertCharArray2String.Benchmarks\ConvertCharArray2String.Benchmarks.csproj", "{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Release|Any CPU.Build.0 = Release|Any CPU
{C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Release|Any CPU.Build.0 = Release|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Debug|x64.ActiveCfg = Debug|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Debug|x64.Build.0 = Debug|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Debug|x86.ActiveCfg = Debug|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Debug|x86.Build.0 = Debug|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Release|Any CPU.Build.0 = Release|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Release|x64.ActiveCfg = Release|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Release|x64.Build.0 = Release|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Release|x86.ActiveCfg = Release|Any CPU
{CC387591-8080-46EE-8045-62FB77775F15}.Release|x86.Build.0 = Release|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x64.ActiveCfg = Debug|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x64.Build.0 = Debug|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x86.ActiveCfg = Debug|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x86.Build.0 = Debug|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|Any CPU.Build.0 = Release|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x64.ActiveCfg = Release|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x64.Build.0 = Release|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x86.ActiveCfg = Release|Any CPU
{269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x86.Build.0 = Release|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x64.ActiveCfg = Debug|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x64.Build.0 = Debug|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x86.ActiveCfg = Debug|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x86.Build.0 = Debug|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|Any CPU.Build.0 = Release|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x64.ActiveCfg = Release|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x64.Build.0 = Release|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x86.ActiveCfg = Release|Any CPU
{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6A5466CD-321D-46D4-B2B3-1E36EAF17EEC}
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
using System.Text;

namespace ConvertCharArray2String
{
public class Program
{
public static void Main(string[] args)
{
char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' };

var convertedToString = new string(charArray);
Console.WriteLine(convertedToString);

var joinedToString = string.Join("", charArray);
Console.WriteLine(joinedToString);

var concatedToString = string.Concat(charArray);
Console.WriteLine(concatedToString);

Console.ReadLine();
}
}
}
char[] charArray = ['c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e'];

var convertedToString = new string(charArray);

Console.WriteLine(convertedToString);

var partOfArray = new string(charArray, 0, 4);

Console.WriteLine(partOfArray);

var joinedToString = string.Join("", charArray);

Console.WriteLine(joinedToString);

var withDashes = string.Join("-", charArray);

Console.WriteLine(withDashes);

var concatedToString = string.Concat(charArray);

Console.WriteLine(concatedToString);

char letter = 'c';

var fromChar = letter.ToString();

Console.WriteLine(fromChar);
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.7" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.7" />
<PackageReference Include="coverlet.collector" Version="3.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageReference Include="MSTest.TestAdapter" Version="4.5.1" />
<PackageReference Include="MSTest.TestFramework" Version="4.5.1" />
<PackageReference Include="coverlet.collector" Version="10.1.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,38 +1,78 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ConvertCharArray2StringTests
namespace ConvertCharArray2StringTests;

[TestClass]
public class ConvertCharArrayTests
{
[TestClass]
public class ConvertCharArrayTests
private readonly char[] _charArray = ['c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e'];

[TestMethod]
public void GivenCharArray_WhenConvertedByConstructor_ThenReturnString()
{
var convertedToString = new string(_charArray);

Assert.AreEqual("code maze", convertedToString);
}

[TestMethod]
public void GivenCharArray_WhenConvertedByJoin_ThenReturnString()
{
var joinedToString = string.Join("", _charArray);

Assert.AreEqual("code maze", joinedToString);
}

[TestMethod]
public void GivenCharArray_WhenConvertedByConcat_ThenReturnString()
{
var concatedToString = string.Concat(_charArray);

Assert.AreEqual("code maze", concatedToString);
}

[TestMethod]
public void GivenCharArray_WhenConvertedByConstructorWithRange_ThenReturnPartOfString()
{
[TestMethod]
public void GivenCharArray_WhenConvertedByConstructor_ThenReturnString()
{
char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' };
var partOfArray = new string(_charArray, 0, 4);

var convertedToString = new string(charArray);

Assert.AreEqual("code maze", convertedToString);
}
Assert.AreEqual("code", partOfArray);
}

[TestMethod]
public void GivenCharArray_WhenConvertedByJoin_ThenReturnString()
{
char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' };
[TestMethod]
public void GivenSingleChar_WhenConvertedByToString_ThenReturnString()
{
char letter = 'c';

var joinedToString = string.Join("", charArray);
var fromChar = letter.ToString();

Assert.AreEqual("code maze", joinedToString);
}
Assert.AreEqual("c", fromChar);
}

[TestMethod]
public void GivenCharArray_WhenConvertedByConcat_ThenReturnString()
{
char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' };
[TestMethod]
public void GivenCharArray_WhenJoinedWithSeparator_ThenReturnSeparatedString()
{
var withDashes = string.Join("-", _charArray);

Assert.AreEqual("c-o-d-e- -m-a-z-e", withDashes);
}

var concatedToString = string.Concat(charArray);
[TestMethod]
public void GivenNullCharArray_WhenConvertedByConstructor_ThenReturnEmptyString()
{
char[]? nothing = null;

var convertedToString = new string(nothing);

Assert.AreEqual(string.Empty, convertedToString);
}

[TestMethod]
public void GivenNullCharArray_WhenConvertedByConcatOrJoin_ThenThrowArgumentNullException()
{
char[]? nothing = null;

Assert.AreEqual("code maze", concatedToString);
}
Assert.ThrowsExactly<ArgumentNullException>(() => string.Concat(nothing!));
Assert.ThrowsExactly<ArgumentNullException>(() => string.Join("", nothing!));
}
}
}
Loading