Save()方法会返回false还是总是返回true?

时间:2015-04-04 18:14:27

标签: c# using-statement

这个问题实际上是对另一个主题的回答的后续问题,但是对于那个原始问题不在话题,所以我在一个新的主题中问它。

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

问题可以独立存在,因此原始问题的链接只是好奇的参考。

我的问题只是这个? Save()方法会返回false还是总是返回true?

    public bool Save()
    {
        bool success = false;

        using (DataAccess.ExecuteDataTable("[dbo].[udp_Customers_ups]",
            DataAccess.Parameter(CustomerIdColumn, CustomerId),
            DataAccess.Parameter(CodeColumn, Code),
            DataAccess.Parameter(CompanyColumn, Company),
            DataAccess.Parameter(CommentsColumn, Comments),
            DataAccess.Parameter(ContactColumn, Contact),
            DataAccess.Parameter(StreetColumn, Street),
            DataAccess.Parameter(CityColumn, City),
            DataAccess.Parameter(StateColumn, State),
            DataAccess.Parameter(ZipcodeColumn, Zipcode),
            DataAccess.Parameter(PhoneColumn, Phone),
            DataAccess.Parameter(IsNewColumn, IsNew),
            DataAccess.Parameter(IsDeletedColumn, IsDeleted),
            DataAccess.Parameter(LastUpdatedColumn, LastUpdated),
            DataAccess.Parameter(UpdatedByColumn, UpdatedBy)))
        {
            success = true;
        }      

         return success;
    } 

我试图强制使用不会使用的情况,但每次我都会遇到不同的错误。所以我认为这个方法总是正确的,因为任何导致它失败的东西都会在数据层上浮现,并且永远不会让它回到这里以返回错误。

2 个答案:

答案 0 :(得分:2)

此方法将始终返回true,否则将抛出异常,因为语句

     return success;

总是先于("支配")

        success = true;

我怀疑使用声明并不是你在这里寻找的。使用保证在传递给using语句的对象上调用dispose方法。并且无论如何都会执行循环内的代码。有关using语句的详细信息,请参阅https://msdn.microsoft.com/en-us/library/yh598w02.aspx

答案 1 :(得分:0)

您的代码等同于

    public bool Save()
    {
        using (DataAccess.ExecuteDataTable("[dbo].[udp_Customers_ups]",
            DataAccess.Parameter(CustomerIdColumn, CustomerId),
            DataAccess.Parameter(CodeColumn, Code),
            DataAccess.Parameter(CompanyColumn, Company),
            DataAccess.Parameter(CommentsColumn, Comments),
            DataAccess.Parameter(ContactColumn, Contact),
            DataAccess.Parameter(StreetColumn, Street),
            DataAccess.Parameter(CityColumn, City),
            DataAccess.Parameter(StateColumn, State),
            DataAccess.Parameter(ZipcodeColumn, Zipcode),
            DataAccess.Parameter(PhoneColumn, Phone),
            DataAccess.Parameter(IsNewColumn, IsNew),
            DataAccess.Parameter(IsDeletedColumn, IsDeleted),
            DataAccess.Parameter(LastUpdatedColumn, LastUpdated),
            DataAccess.Parameter(UpdatedByColumn, UpdatedBy)))
        {
            return true;
        }      
    } 

这表明falsesuccess的分配未使用。