使用StreamReader.EndOfStream的问题?

Mat*_*ald 3 .net c# file-io streamreader textreader

所以我正在做一个我在配置文件中读取的项目.配置文件只是一个字符串列表,如"D 1 1","C 2 2"等.现在我还没有在C#中进行过读/写操作,所以我在网上查找了它,期待找到某种类型的再现C/C++ .eof().我找不到一个.

所以我拥有的是......

TextReader tr = new StreamReader("/mypath");
Run Code Online (Sandbox Code Playgroud)

在网上我发现如何读到文件末尾的所有例子中,两个例子一直在发生

while ((line = tr.ReadLine() != null)
Run Code Online (Sandbox Code Playgroud)

要么

while (tr.Peek() >= 0)
Run Code Online (Sandbox Code Playgroud)

我注意到StreamReader有一个bool EndOfStream,但是没有人建议它让我相信这个解决方案有问题.我结束了这样尝试......

while (!(tr as StreamReader).EndOfStream)
Run Code Online (Sandbox Code Playgroud)

它似乎工作得很好.

所以我想我的问题是,我是否会遇到将TextReader转换为StreamReader并检查EndOfStream的问题?

Jon*_*eet 5

一个明显的缺点是它使您的代码StreamReader具体化.鉴于您可以使用just轻松编写代码TextReader,为什么不这样做呢?这样,如果您需要使用StringReader(或类似的)单元测试等,就不会有任何困难.

就个人而言,我总是使用"读取行直到它为空"的方法 - 有时通过扩展方法,以便我可以使用

foreach (string line in reader.EnumerateLines())
{
}
Run Code Online (Sandbox Code Playgroud)

EnumerateLines然后是TextReader使用迭代器块的扩展方法.(这意味着你也可以轻松地将它用于LINQ等.)