当我使用参数时我无法添加到一个值,但它在不在函数中时工作正常
I can't add to a value when i use parameter, but it works fine when not in the function
所以当我尝试在函数中 += 1 时,值不会更新,但我可以在没有参数的情况下更新值。
请帮忙。
public void buystock(int amountofstocks, int stockvalue)
{
int stocksbuy = 400;
if (amountofstocks >= 40)
{
if (GetComponent<Money>().MoneyValue >= (stockvalue + stocksbuy))
{
GetComponent<Money>().MoneyValue -= stockvalue + 400;
amountofstocks += 1;
}
}
else
{
if (GetComponent<Money>().MoneyValue >= (stockvalue + 10))
{
GetComponent<Money>().MoneyValue -= stockvalue + 10;
}
}
}
我的另一个是:
public void buyoil1()
{
buystock(oil1amountofstocks, oil1value);
}
非常感谢!
Int
是 value 类型,所以它的值是 copied (与它的引用相反)到函数参数和任何该参数的修改是 local。
为了传递 int
的 reference,您应该使用 ref 关键字。
尝试关注
public void buystock(ref int amountofstocks,ref int stockvalue)
您正在将一个结构传递给您的方法,该方法正在复制值而不是传递对变量的引用。
考虑使用 return 值、out
或 ref
以获得所需的结果。
这是official documentation关于在 C# 中将参数传递给方法的内容,这有助于解释问题
令人惊讶的是这里有多少答案是完全错误的。他们都在谈论 int
是一种值类型,而这些信息在这里完全不相关。
int
是一个 immutable 类型,你不能改变它,这是值类型与这个问题的上下文相关的唯一原因。
不知何故,答案似乎混淆了 amountofstocks =+ 1
与变异的值类型,这完全是错误的!这里唯一发生的事情是变量 amountofstock
被 分配了一个新值 并且因为参数是按值传递的(c# 中的默认行为)赋值有在调用站点没有任何影响(分配是在 copy 上进行的)。
如果 amountofstock
是引用类型 ,则会发生完全相同的事情。如果 amountofstring
成为 string
,那么您的代码行为将完全没有变化。
长话短说,您看到的行为是由于 c# 中的参数默认情况下按值传递,即句点。在这种特殊情况下,它与 amountofstock
是值类型无关。
如果您需要重新分配一个参数的值并让它在调用站点持久化,那么您需要通过引用传递它;在你的情况下 ref amountofstock
虽然在某些情况下 out
更合适。
所以当我尝试在函数中 += 1 时,值不会更新,但我可以在没有参数的情况下更新值。
请帮忙。
public void buystock(int amountofstocks, int stockvalue)
{
int stocksbuy = 400;
if (amountofstocks >= 40)
{
if (GetComponent<Money>().MoneyValue >= (stockvalue + stocksbuy))
{
GetComponent<Money>().MoneyValue -= stockvalue + 400;
amountofstocks += 1;
}
}
else
{
if (GetComponent<Money>().MoneyValue >= (stockvalue + 10))
{
GetComponent<Money>().MoneyValue -= stockvalue + 10;
}
}
}
我的另一个是:
public void buyoil1()
{
buystock(oil1amountofstocks, oil1value);
}
非常感谢!
Int
是 value 类型,所以它的值是 copied (与它的引用相反)到函数参数和任何该参数的修改是 local。
为了传递 int
的 reference,您应该使用 ref 关键字。
尝试关注
public void buystock(ref int amountofstocks,ref int stockvalue)
您正在将一个结构传递给您的方法,该方法正在复制值而不是传递对变量的引用。
考虑使用 return 值、out
或 ref
以获得所需的结果。
这是official documentation关于在 C# 中将参数传递给方法的内容,这有助于解释问题
令人惊讶的是这里有多少答案是完全错误的。他们都在谈论 int
是一种值类型,而这些信息在这里完全不相关。
int
是一个 immutable 类型,你不能改变它,这是值类型与这个问题的上下文相关的唯一原因。
不知何故,答案似乎混淆了 amountofstocks =+ 1
与变异的值类型,这完全是错误的!这里唯一发生的事情是变量 amountofstock
被 分配了一个新值 并且因为参数是按值传递的(c# 中的默认行为)赋值有在调用站点没有任何影响(分配是在 copy 上进行的)。
如果 amountofstock
是引用类型 ,则会发生完全相同的事情。如果 amountofstring
成为 string
,那么您的代码行为将完全没有变化。
长话短说,您看到的行为是由于 c# 中的参数默认情况下按值传递,即句点。在这种特殊情况下,它与 amountofstock
是值类型无关。
如果您需要重新分配一个参数的值并让它在调用站点持久化,那么您需要通过引用传递它;在你的情况下 ref amountofstock
虽然在某些情况下 out
更合适。