首页 > 解决方案 > 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#iderefactoringc#-8.0

解决方案


您正在使用 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...
}

推荐阅读