我有一个名为 processOrders 的方法,它接受3个参数并且不会返回任何内容。其中一个参数名为 currentOrder 。
在processOrders处理完currentOrder之后,我将需要它的值。
当该方法没有返回任何内容时,如何通过processOrders方法更改currentOrder的值?
谢谢!
以下是代码:
var orderTitle = "";
var currentOrder = 0;
var totalOrders = orders.Count;
processOrders(currentOrder, totalOrders, orders);
if(currentOrder > 10) {
//...do stuff...
}
processOrders(int currentOrder, int totalOrders, IList<Orders> orders)
{
while (currentOrder < totalOrders)
{
if(orders[currentOrder] < 5)
{
orderTitle = orderTitle + orders[currentOrder];
currentOrder ++;
} else {
yield return
CreateNewOrderForm(currentOrder, orderTitle)
break;
}
}
}
答案 0 :(得分:1)
没有太过技术性......传递基元的标准方法(如“int”或“decimal”)是按值传递它们。这意味着您将值传递给函数,并在函数内部创建变量的新“副本”。该副本仅在函数内部被操作,并在函数退出时被销毁。
如果要操作函数中的变量并保留这些更改,则需要通过引用传递。通过引用传递意味着您为函数赋予变量“指针”,如果函数对值进行任何更改,它将更改变量的副本,即变量的副本。
要完成此操作,必须将参数声明为参考参数,然后使用引用调用该函数。像这样:
public void processOrders(ref int currentOrder, int totalOrders, IList<Orders> orders)
{
//...
}
public void main(int[] args)
{
//....
processOrders(ref currentOrder, totalOrders, orders);
if(currentOrder > 10)
{
//do something
}
}
请注意,您不必通过引用显式传递您的订单列表,因为默认情况下,对象是通过引用传递的。