gpt4 book ai didi

c# - 迭代器中的“最后” block

转载 作者:太空狗 更新时间:2023-10-29 19:40:13 26 4
gpt4 key购买 nike

在 C# 迭代器 block 中是否有任何方法可以提供一个代码块,该代码块将在 foreach 结束时运行(自然地或被中断),比如说清理资源?

我想出的最好方法是使用 using 结构,这很好,但确实需要一个 IDisposable 类来进行清理。例如:

    public static IEnumerable<string> ReadLines(this Stream stream)
{
using (StreamReader rdr = new StreamReader(stream))
{
string txt = rdr.ReadLine();
while (txt != null)
{
yield return txt;
txt = rdr.ReadLine();
}
rdr.Close();
}
}

最佳答案

try/finally工作正常,只要调用者使用 foreach或手动调用 DisposeIEnumerator<T> 上.老实说,如果是为了清理资源,一个using无论如何,声明可能是最好的方式 - 如果您使用的是需要清理但未实现的资源 IDisposable , 这本身就是一个问题:)

在迭代器 block 中可以做什么有一些限制,如explained on Eric Lippert's blog ,但在大多数情况下一切都很好。

您可能会发现 my article about iterator block implementation有趣的是如何finally已翻译。

关于c# - 迭代器中的“最后” block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com