小编Adr*_*tin的帖子

.net framework 4.0的File.ReadLines(..)方法中的错误

这段代码:

IEnumerable<string> lines = File.ReadLines("file path");
foreach (var line in lines)
{
    Console.WriteLine(line); 
}
foreach (var line in lines)
{ 
    Console.WriteLine(line); 
} 
Run Code Online (Sandbox Code Playgroud)

ObjectDisposedException : {"Cannot read from a closed TextReader."}如果第二个foreach执行则抛出一个.似乎返回的迭代器对象File.ReadLines(..)不能多次枚举.您必须通过调用获取新的迭代器对象File.ReadLines(..),然后使用它进行迭代.

如果我File.ReadLines(..)用我的版本替换(参数未经验证,那只是一个例子):

public static IEnumerable<string> MyReadLines(string path)
{
    using (var stream = new TextReader(path))
    {
        string line;
        while ((line = stream.ReadLine()) != null)
        {
            yield return line;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可以多次迭代文件的行.

使用调查.Net Reflector表明,File.ReadLines(..)调用private的File.InternalReadLines(TextReader reader)实现创建了实际的迭代器.作为参数传递的读者MoveNext()在迭代器的方法中用于获取文件的行,并在到达文件末尾时被释放.这意味着一旦 …

.net c# c#-4.0

11
推荐指数
2
解决办法
3715
查看次数

标签 统计

.net ×1

c# ×1

c#-4.0 ×1