提问人:Prakash sekar 提问时间:12/12/2022 最后编辑:nvoigtPrakash sekar 更新时间:12/12/2022 访问量:87
为什么我们在 C# 中使用嵌套的 using 语句?
why we use nested using statement in c#?
问:
using (StreamReader outFile = new StreamReader(outputFile.OpenRead()))
{
StreamReader resFile = new StreamReader(resultFile.OpenRead())
{ //Some Codes }
}
为什么上面的 resFile 对象没有自动关闭?
我也在 using 语句中编写了 resFile 对象。请解释一下该声明。using
答:
2赞
Mark Cilia Vincenti
12/12/2022
#1
您没有使用嵌套使用。只有一个 using 语句。
嵌套使用示例:
using (...)
{
using (...)
{
...
}
}
您可能希望使用嵌套使用的原因是,您有多个需要释放的声明。
评论
0赞
Prakash sekar
12/12/2022
这意味着每个声明都应该有一个 using 语句,然后只处理它。否则,它不会自动处理,即使我们在 using 块中声明它。对吗?
0赞
Mark Cilia Vincenti
12/12/2022
一旦 using 语句超出范围,将立即调用该方法。Dispose()
1赞
Thomas Voß
12/12/2022
#2
在此处找到 using 语句的官方解释:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement
在您的示例中,您没有嵌套的 using 语句,正如 Mark 在他的回答中正确指出的那样。(尽管您应该对 resFile Streamreader 进行第二次使用。
如果你想在 “Some Codes” 部分同时使用两个流读取器,它们必须是嵌套的,因为 outFile 和 resFile 的实例只能在大括号内使用。
从 C#8 开始,使用“避免”嵌套的新可能性。请参见:https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/proposals/csharp-8.0/using
0赞
knittl
12/12/2022
#3
使用
是语法糖,基本上编译为以下内容:
官方代码:
using (var a = b)
{
c();
d();
}
脱糖代码:
{
var a;
try {
a = b;
c();
d();
} finally {
if (a != null) {
((IDisposable)a).Dispose();
}
}
}
评论