최신C#버전에서는 T[] 대신 ReadOnlySpan<T> 도 가능한듯.
그냥 최신버전에서 완전금지에서 일부허용으로 바뀌면서 에러표시를 안보이는거였음...
static IEnumerable<Range> Split<T>(this IList<T> data, T separator) where T : IEquatable<T>
{
int s, e = s = 0;
while (e < data.Count)
if (data[e].Equals(separator)) { yield return s..e; s = e += 1; } else e += 1;
yield return s..e;
}
Sync();
void Sync()
{
const byte _ = 0;
byte[] b = [1,2,3,4,_,1,2,3,_,1,2,_];
var r = b.Split(_);
r.Display();
r.Select(r => b[r]).Display();
}
여전히 문자열용이지만 Range를 반환한다는 발상이 통함! :
https://github.com/dotnet/core/blob/2f5ecee9ea988b4d85e288178c9d16131f3b0c43/release-notes/9.0/preview/preview6/libraries.md#regexenumeratesplits