在方法中使用输入参数是一种好习惯

时间:2012-11-19 17:34:31

标签: c#

我需要知道在方法中使用相同的输入参数而不将它们分配给方法局部变量是否是一个好习惯。以下代码块可以更清晰地描述查询。

选项1:输入参数在方法

中使用
public int SumValues(List<int> pLValues)
        {
            int _sum = 0;

            for (int i = 0; i < pLValues.Count; i++)
            {
                _sum = +pLValues[i];
            }

            return _sum;
        }

选项2:分配给局部变量并在方法中使用它。

public int SumValues(List<int> pLValues)
{
    int _sum = 0;
    List<int> _lVal = pLValues;

    for (int i = 0; i < _lVal.Count; i++)
    {
        _sum = +_lVal[i];
    }

    return _sum;
}

请告诉我最好的方法是什么?为什么?

2 个答案:

答案 0 :(得分:7)

声明另一个局部变量没有任何好处,所以不要这样做。 (将参数视为一个局部变量,明确指定为开头。)

如果您有一个ref参数而且您不想更改该值,那么然后就可以将它复制到一个新的局部变量中。同样,如果您稍后需要原始值。

会对您的代码进行各种更改,但是:

  • 我当然会使用LINQ的Sum方法开始:)
  • 我会抛弃你为你的变量获得的前缀
  • 我可能会将输入类型更改为IEnumerable<int>
  • 我使用foreach循环而不是按索引获取

答案 1 :(得分:3)

在您的案例中完全相同_lValpLValues是同一个对象。

C#使用引用语义。那是你做的时候

_lVal = pLValues;

您声明_lVal是与pLValues相同的对象的引用,您对_lVal引用的对象所做的任何更改都可以通过pLValues进行观察。< / p>

_lVal.Add(int.MaxValue);
if(pLValues.Last() == int.MaxValue){
   //this will be true because the element added in the first line
   //is added to the object that both _lVal and pLValues references
}

如果参数的类型是ValueType(例如int),则无关紧要,但出于其他原因。由于任何赋值都是复制赋值,因此参数是传递给方法调用的副本。副本的范围与方法相同(在一般情况下有奇怪的情况,例如关闭参数)。

所以最后简短的回答是。您可能不会创建局部变量,因为除了松散的可读性之外什么都没有,因为现在使用参数时不明显