File
クラスには ReadAllLines
というメソッドがありますが、Stream
にはないので、同等の機能を実装してみます。
環境
- Visual Studio 2017
- .NET Core 2.2
- C# 7.1
サンプルコード
IEnumerable<string> ReadAllLines(Stream stream)
{
var lines = new List<string>();
using (var sr = new StreamReader(stream))
{
while (sr.Peek() >= 0)
lines.Add(sr.ReadLine());
}
return lines;
}
反復子を使うともうちょっとシンプルになります。
IEnumerable<string> ReadAllLines(Stream stream)
{
using (var sr = new StreamReader(stream))
{
while (sr.Peek() >= 0)
yield return sr.ReadLine());
}
}
非同期版です。
async Task<IEnumerable<string>> ReadAllLinesAsync(Stream stream)
{
var lines = new List<string>();
using (var sr = new StreamReader(stream))
{
while (sr.Peek() >= 0)
lines.Add(await sr.ReadLineAsync());
}
return lines;
}
C# 8.0 以降であれば async/await
と yield
が共存できるそうなので、もっとシンプルになります。
あとは、これらは拡張メソッドにしておいたほうが使い勝手が良いかもしれません。