c# - IDE0063 什么时候处理?
问题描述
我试图理解这个 C# 8 简化功能:
IDE0063 'using' 语句可以简化
例如,我有:
void Method()
{
using (var client = new Client())
{
// pre code...
client.Do();
// post code...
} --> client.Dispose() was called here.
// more code...
}
IDE 告诉我,我可以using
通过编写以下代码来简化此语句:
void Method()
{
using (var client = new Client());
// pre code...
client.Do();
// post code...
// more code...
}
我无法理解它是如何工作的,以及它如何决定我不再using
是变量。更具体地说,它究竟什么时候调用client.Dispose
方法?
解决方案
您正在使用 C# 8。在较旧的 C# 版本中,这;
会使其无效。
在新语法中,client
保留在周围方法(或其他{}
范围块)的范围内。请注意,您也可以省略外部的一对()
。
它被称为using 声明,文档在此处。
void Method()
{
using var client = new Client();
// pre code...
client.Do();
// post code...
// more code...
} --> client.Dispose() is called here (at the latest)
从逻辑上讲,Dispose 发生在,}
但优化器可能会更早完成。
编辑
我注意到,// more code
在块结束之后using
,阻止了这种改进的出现。因此,如果您转换以下代码,将不再有歧义:
void Method()
{
// not relevant code
using (var client = new Client())
{
// pre code...
client.Do();
// post code...
}
}
进入这段代码:
void Method()
{
// not relevant code
using var client = new Client();
// pre code...
client.Do();
// post code...
}
推荐阅读
- android - Admob 没有任何报告活动
- javascript - 如何创建console.log esk 打字效果
- shader - 奇怪的纹理包裹问题(片段着色器)
- flutter - 检查是否安装了特定的应用程序
- java - 在读取文件时从某一行创建变量
- java - 从数据库中检索时,OffsetDateTime 值已更改
- windows - 从 Windows 命令行运行 omnet++ 模拟
- javascript - 打字稿如何连接枚举值以在开关中使用
- javascript - Shepherd.js - 每次重新渲染时的新游览实例 - 自动触发 tour.start() 将使用“死”实例
- c# - 访问vba中的.net5 com库