所以当我在函数中尝试 + = 1 时,值为doesent update,但我可以更新没有参数的值。
请帮忙。
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);
}
非常感谢!
答案 0 :(得分:2)
Int
是值类型,因此它的值被复制(与它的引用相反)到函数参数和任何对该参数的修改是本地。
要传递int
的参考,您应该使用参考关键字。
尝试以下
public void buystock(ref int amountofstocks,ref int stockvalue)
答案 1 :(得分:1)
您正在将结构传递给正在复制值的方法,而不是将引用传递给变量。
考虑使用返回值out
或ref
来获得所需的结果。
这是关于向C#中的方法传递参数的official documentation,它有助于解释问题
答案 2 :(得分:-2)
令人惊讶的是,这里有多少答案是完全错误的。他们都继续int
作为一种价值类型,而这些信息在这里完全无关紧要。
int
是一个不可变的类型,你不能改变它,这是在这个问题的上下文中值类型可能相关的唯一原因。
不知何故,答案似乎是将amountofstocks =+ 1
与变异值类型混合在一起,这只是假的!这里唯一发生的事情是变量amountofstock
被分配了一个新值,并且因为参数是通过值传递的(c#中的默认行为),所以赋值没有任何影响回到呼叫站点(分配在副本上进行)。
如果amountofstock
是引用类型,则会发生同样的事情。如果amountofstring
为string
,则代码的行为根本不会发生任何变化。
简而言之,您所看到的行为是由于c#中的参数默认情况下是按值,期间传递的。在这种特殊情况下,它无关,amountofstock
是值类型。
如果您需要重新分配参数的值并将其保留在呼叫站点,那么您需要通过引用传递它;在您的情况下ref amountofstock
虽然在某些情况下out
更合适。