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

时间:2015-04-04 15:25:09

标签: c# coderush

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

    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是一个未使用的声明。而且由于使用dt(我认为)使用dt,我认为警告是误报。所以我想知道CodeRush是错还是错了?

1 个答案:

答案 0 :(得分:2)

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块中包装这样的调用是否是一个好主意...