mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-02 01:03:29 +01:00
Rewrite StringExtensions.ToString(IEnumerable<Rune>)
Appends rune chars to StringBuilder avoiding intermediate string allocation for each rune append.
This commit is contained in:
@@ -124,14 +124,16 @@ public static class StringExtensions
|
||||
/// <returns></returns>
|
||||
public static string ToString (IEnumerable<Rune> runes)
|
||||
{
|
||||
var str = string.Empty;
|
||||
|
||||
StringBuilder stringBuilder = new();
|
||||
const int maxCharsPerRune = 2;
|
||||
Span<char> charBuffer = stackalloc char[maxCharsPerRune];
|
||||
foreach (Rune rune in runes)
|
||||
{
|
||||
str += rune.ToString ();
|
||||
int charsWritten = rune.EncodeToUtf16 (charBuffer);
|
||||
ReadOnlySpan<char> runeChars = charBuffer [..charsWritten];
|
||||
stringBuilder.Append (runeChars);
|
||||
}
|
||||
|
||||
return str;
|
||||
return stringBuilder.ToString ();
|
||||
}
|
||||
|
||||
/// <summary>Converts a byte generic collection into a string in the provided encoding (default is UTF8)</summary>
|
||||
|
||||
Reference in New Issue
Block a user