class MyEnumerableExtensions
{
//For a source containing N delimiters, returns exactly N+1 lists
public static IEnumerable<List<T>> SplitOn(
this IEnumerable<T> source,
T delimiter)
{
var list = new List<T>();
foreach (var item in source)
{
if (delimiter.Equals(item))
{
yield return list;
list = new List<T>();
}
else
{
list.Add(item);
}
}
yield return list;
}
}
Usage
我需要读取一个二进制文件并使用换行符作为分隔符将其分成块。
var path = "binary-file.bin";
var delimiter = (byte)'\n';
var chunks = File.ReadAllBytes(path)
.SplitOn(delimiter)
.ToList();