我需要知道在方法中使用相同的输入参数而不将它们分配给方法局部变量是否是一个好习惯。以下代码块可以更清晰地描述查询。
选项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;
}
请告诉我最好的方法是什么?为什么?
答案 0 :(得分:7)
声明另一个局部变量没有任何好处,所以不要这样做。 (将参数视为一个局部变量,明确指定为开头。)
如果您有一个ref
参数而且您不想更改该值,那么然后就可以将它复制到一个新的局部变量中。同样,如果您稍后需要原始值。
我 会对您的代码进行各种更改,但是:
Sum
方法开始:)IEnumerable<int>
foreach
循环而不是按索引获取答案 1 :(得分:3)
在您的案例中完全相同_lVal
与pLValues
是同一个对象。
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),则无关紧要,但出于其他原因。由于任何赋值都是复制赋值,因此参数是传递给方法调用的副本。副本的范围与方法相同(在一般情况下有奇怪的情况,例如关闭参数)。
所以最后简短的回答是。您可能不会创建局部变量,因为除了松散的可读性之外什么都没有,因为现在使用参数时不明显