ZLinqでString.JoinしたいときはJoinToString
追記:JoinToStringという便利なメソッド実装されてました。これを使いましょう!
JoinToString.cs
string[] nameParts = { "The", "One", "Ring" };
string ringName = nameParts
.AsValueEnumerable()
.Select(part => part.ToUpper())
.JoinToString(" ");
// ringName = "THE ONE RING"以下、「ZLinqとZStringでJoinedBy」というタイトルで公開していた時の残骸。
ExtraLINQにあったJoinedByをZLinq向けに移植。
JoinedBy.cs
string[] nameParts = { "The", "One", "Ring" };
string ringName = nameParts
.AsValueEnumerable()
.Select(part => part.ToUpper())
.JoinedBy(" ");
// ringName = "THE ONE RING"JoinedBy.cs
public static class ZLinqExtensions
{
public static string JoinedBy<TEnumerator, TSource>(this ValueEnumerable<TEnumerator, TSource> source, string separator)
where TEnumerator : struct, IValueEnumerator<TSource>
#if NET9_0_OR_GREATER
, allows ref struct
#endif
{
var enumerator = source.Enumerator;
if (enumerator.TryGetSpan(out var span))
{
using var sb = ZString.CreateStringBuilder();
var first = true;
foreach (var item in span)
{
if (!first) sb.Append(separator);
first = false;
sb.Append(item);
}
return sb.ToString();
}
{
using var sb = ZString.CreateStringBuilder();
var first = true;
while (enumerator.TryGetNext(out var current))
{
if (!first) sb.Append(separator);
first = false;
sb.Append(current);
}
return sb.ToString();
}
}
}