[API Proposal]: `TextReader.ReadLines` and `ReadAllLines`
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 30/100
Research direction
Begin with TextReader's existing ReadLine and ReadToEnd APIs, then compare the System.IO.File.ReadLines and ReadAllLines counterparts. Resolve the proposed naming, return types, and async cancellation behavior before implementation; done means an agreed API design with matching tests.
Written by the indexing model from the issue text.
Description
Background and motivation
Currently TextReader offers ReadLine and ReadToEnd methods (and their corresponding async variants). In many cases it is useful to read multiple lines until the end of stream.
Such APIs would be a counterpart to System.IO.File.ReadLines.
Underlying logic can utilize existing ReadLine implementation to enumerate until end of stream.
API Proposal
public class TextReader
{
public virtual System.Collections.Generic.IEnumerable<string> ReadLines();
public virtual System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(System.Threading.CancellationToken cancellationToken = default);
public virtual IEnumrable<string> ReadAllLines();
public virtual Task<IEnumerable<string>> ReadAllLinesAsync(System.Threading.CancellationToken cancellationToken = default);
}
API Usage
public async Task ProcessInput(StreamReader input)
{
var lines = await input.ReadAllLines();
var lineCount = lines.Length;
...
}
Alternative Designs
- When the stream has already advanced, the meaning of
ReadAllLinesis not accurate. It might be better asReadLinesToEndandReadLinesToEndAsync ReadLinesToEndreturnIEnumerable<string>whereas counterpartFile.ReadAllLinesreturnsstring[]- not sure which is preferable
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·