如何保留对参数所做的更改?
How to keep the changes made to a parameter?
我有一个函数,可以在特定条件下将一个对象添加到列表中。
void Func(out List<Move> moves, Move move)
{
if (conditions) moves.Add(move);
return;
}
我认为可以在函数内更改 out 参数并将更改保留在函数外部,但这段代码给了我一个异常,说明必须始终分配 out 参数。该函数的全部目的是过滤掉某些项目,防止它们被放入列表中。
这是我第一次使用 out 参数,所以我可能误解了它的工作原理。
如有任何帮助,我们将不胜感激!
我认为在这种情况下您不需要“out”参数。 List<> 是引用类型,因此 adding/removing 在函数中对它的更改也应保留在它之外。
“out”关键字表示您希望通过引用而不是值来传递参数。 Non-reference int、decimal、bool、structs 等类型按值传递,这意味着通常在函数内部对它们所做的更改一旦超出函数范围就会被丢弃。
但是,对象、列表等引用类型始终通过引用传递,因此不需要“out”参数。即使您离开函数的范围,对它们所做的更改也将始终保留。当然,假设您对它们指向的对象进行了更改,如果您分配一个新对象,我认为它不会持续存在
我有一个函数,可以在特定条件下将一个对象添加到列表中。
void Func(out List<Move> moves, Move move)
{
if (conditions) moves.Add(move);
return;
}
我认为可以在函数内更改 out 参数并将更改保留在函数外部,但这段代码给了我一个异常,说明必须始终分配 out 参数。该函数的全部目的是过滤掉某些项目,防止它们被放入列表中。
这是我第一次使用 out 参数,所以我可能误解了它的工作原理。
如有任何帮助,我们将不胜感激!
我认为在这种情况下您不需要“out”参数。 List<> 是引用类型,因此 adding/removing 在函数中对它的更改也应保留在它之外。
“out”关键字表示您希望通过引用而不是值来传递参数。 Non-reference int、decimal、bool、structs 等类型按值传递,这意味着通常在函数内部对它们所做的更改一旦超出函数范围就会被丢弃。
但是,对象、列表等引用类型始终通过引用传递,因此不需要“out”参数。即使您离开函数的范围,对它们所做的更改也将始终保留。当然,假设您对它们指向的对象进行了更改,如果您分配一个新对象,我认为它不会持续存在