c# - IDE0063什么时候配置?

标签 c# ide refactoring c#-8.0

我试图理解这个 C# 8 简化功能:

IDE0063 'using' statement can be simplified

例如,我有:

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...
}

我无法理解它是如何工作的以及它如何决定我不再使用变量。更具体地说,它究竟在什么时候调用 client.Dispose 方法?

最佳答案

您使用的是 C# 8。在旧的 C# 版本中,; 会使此无效。

在新语法中,client 保留在周围方法(或其他 {} 范围 block )的范围内。请注意,您也可以省略 () 的外部对。

它叫做using 声明,文档是here .

void Method()
{
    using var client = new Client();
    // pre code...
    client.Do();
    // post code...
    // more code...
} --> client.Dispose() is called here (at the latest)

逻辑上 Dispose 发生在 但优化器可能会更早执行。

编辑

我注意到在 using block 结束后有 //more code 会阻止这种改进的出现。所以转换成下面的代码就不会再有歧义了:

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...
}

关于c# - IDE0063什么时候配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460048/

相关文章:

ide - IntelliJ 11.1.3 中的 "application servers"选项卡在哪里

javascript - 简写如果?返回 : null

c# - Azure WebJob 访问被拒绝

c# - Compact Framework 中是否有 StructLayout "Pack"属性的替代方案?

ios - 红色组名颜色

c# - 有没有人使用 C#/Silverlight/WPF 开发过编辑器/ide?

c# - 空白的正则表达式模式

c# - 你应该在 C# 中使用指针(不安全代码)吗?

java - 重构部分类和循环依赖

java - 将变量分配给 null 的最佳替代方法是什么?