为什么 CodeRush 警告我代码中有未使用的声明?

Why does CodeRush warn me of an Unused Declaration in code?

我有这段代码,我在我的所有应用程序中都使用它来将数据保存回数据库。

    public bool SaveDemo()
    {
        bool success = false;

        try
        {
            using (DataTable dt = DataAccess.ExecuteDataTable("[dbo].[udp_Customers_ups]",
                DataAccess.Parameter(CustomerIdColumn, CustomerId),
                DataAccess.Parameter(CodeColumn, Code),
                DataAccess.Parameter(CompanyColumn, Company),
                DataAccess.Parameter(IsDeletedColumn, IsDeleted),
                DataAccess.Parameter(LastUpdatedColumn, LastUpdated),
                DataAccess.Parameter(UpdatedByColumn, UpdatedBy)))

                success = true;
        }
        catch
        {
            success = false;
        }

        return success;
    } 

代码按原样工作,我的意思是它将数据保存回数据库。但是 CodeRush 抱怨 dt 是未使用的声明。而且由于 Using 是(我认为)使用 dt 我会认为警告是误报。所以我想知道 CodeRush 是否有误,或者我是否遗漏了什么?

CR 想表达的是:

using (DataTable dt =  DataAccess.ExecuteDataTable ... 

您没有使用 dt 的声明;之后变量保持不变。

重构按钮会将其转换为

using ( DataAccess.ExecuteDataTable ... 

即它仍然是一个 using 语句,但你不会有一个变量来引用它。

在执行此操作时,您可以进行一些内联​​结果转换,从而产生:

    try
    {
        using (DataAccess.ExecuteDataTable("[dbo].[udp_Customers_ups]",
            DataAccess.Parameter(CustomerIdColumn, CustomerId),
            DataAccess.Parameter(CodeColumn, Code),
            DataAccess.Parameter(CompanyColumn, Company),
            DataAccess.Parameter(IsDeletedColumn, IsDeleted),
            DataAccess.Parameter(LastUpdatedColumn, LastUpdated),
            DataAccess.Parameter(UpdatedByColumn, UpdatedBy)))
            return true;
    }
    catch
    {
        return false;
    }

我会让其他人质疑在 catch 块中包装这样的调用是否是个好主意...