重用方法参数

时间:2014-02-25 13:18:12

标签: c# parameters

我有这段代码:

public int Delete(int id)
{
    string query = "DELETE FROM [table] WHERE [id] = @id";

    using (SqlConnection sqlConnection = new SqlConnection(connectionString))
    using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
    {
        sqlCommand.Parameters.Add("id", SqlDbType.Int).Value = id;

        sqlConnection.Open();

        if ((id = sqlCommand.ExecuteNonQuery()) == 0)
            throw new Exception("Not found.");

        return id;
    }
}

可以重用参数ID来存储受影响的行数,还是应该声明新变量?什么通常更好?

3 个答案:

答案 0 :(得分:5)

开发人员花费much more time reading code than writing code。因此,您的主要目标之一应该是编写易于阅读且易于理解的代码。

如果我必须阅读你的代码并浏览最后一行,我会得到你的方法返回某种标识符的(错误)印象。它没有。它返回已删除的行数。

使用不同的变量可以使您的代码更易于阅读,并且不会有任何性能损失。

    ...
    var rowsDeleted = sqlCommand.ExecuteNonQuery();
    if (rowsDeleted == 0)
        throw new Exception("Not found.");

    return rowsDeleted;

它还使您的代码对更改更加健壮:想象您有一天决定使用GUID而不是整数ID,因此您将参数类型更改为Guid。怎么了?代码中一个完全不相关的部分,需要修复。

答案 1 :(得分:4)

你不应该问什么是更高效的,但更具可读性,因此不易出错。

参数是您要删除的ID。 ExecuteNonQuery返回受影响记录的数量。这是两个不同的含义,因此您应该使用两个不同的变量。

int numDeleted = sqlCommand.ExecuteNonQuery();
if(numDeleted == 0)
    throw new Exception("Could not delete record with id " + id);
else if(numDeleted > 1)
    throw new Exception(numDeleted + " records deleted with id " + id);

return numDeleted;

答案 2 :(得分:1)

Is it OK to reuse parameter ID to store number of rows affected or should I rather declare new variable?

是的,可以使用相同的变量,因为intvalue type,其他指令都不依赖于初始值。但是,正如Heinzi指出的那样,为了使您的代码更具可读性和可维护性,最好定义一个新代码