如何将 foreach 与 IEnumerable <String>一起使用


System.Collections.Generic.IEnumerable<String> lines = File.ReadLines("C:\Rooms.txt");
Console.WriteLine(lines.Count());
MessageBox.Show(lines.Count().ToString());
foreach(var line in lines)
{
    // ERROR ON THIS LINE THE NAMESPACE NAME LINE COULD NOT BE FOUND
}

我想获取行的内容并显示在消息框中。但是我在foreach上收到错误

感谢您的协助。

你需要给循环变量一个类型,所以改变

foreach(line in lines)  

foreach(string line in lines) 

除此之外,您还将获得另一个例外:

ObjectDisposedException : {"无法从关闭的 TextReader 读取。

File.ReadLines不返回集合,它类似于StreamReader,它允许读取文件而无需先将所有内容读入内存。但它需要一个开放的溪流。一旦你"执行"了它,它就会被处置。

因此,您要么必须使用 File.ReadAllLines 返回string[],要么不要使用它两次。

  1. Count()
  2. foreach(line in lines)

从 MSDN:

ReadLinesReadAllLines方法的区别如下: 当您使用 ReadLines,您可以在之前开始枚举字符串的集合 返回整个集合;当您使用全部读取行时,您必须 等待返回整个字符串数组,然后才能访问 数组。因此,当您处理非常大的文件时, ReadLines可以更有效率。

foreach要求您指定变量的类型和名称。您只指定了line ,它需要成为类型。 隐式类型变量的var 是建议的约定:

foreach (var line in lines) {

相关内容

最新更新