我想更改函数中布尔值的状态。我的函数有4个参数,第四个是布尔值,默认情况下为true,但是我想在函数内部将其状态更改为false。
我正在呼叫我的方法,
SlotCheck("Red", "red_small_c", puzzle_9, GameControl.control.scoreRedGems, GameControl.control.stone_9);
GameControl.control.stone_9 默认为true。一旦可见性设置为false,它就应该为false ..但是这并不妨碍... stone_9保持为真。
public void SlotCheck(string gemColor,string slotColor,GameObject puzzleStuk,int scoreGem,bool Visibility)
{
if (DragHandler2.itemBegingDragged.name.Contains(gemColor) && DragHandler2.itemBegingDragged.transform.parent.name == slotColor)
{
Debug.Log(DragHandler2.itemBegingDragged.name);
Visibility=false;
puzzleStuk.SetActive(visibility);
Debug.Log(GameControl.control.stone_9); //true
DragHandler2.itemBegingDragged.SetActive(false);
}
我希望GameControl.control.stone_9将其状态更改为false,因为我正在将参数(可见性)的状态更改为false,但GameControl.control.stone_9保持为true。
答案 0 :(得分:3)
如果要在Method内部更改变量的值,则应通过引用进行定义:
public void SlotCheck(string gemColor,string slotColor,GameObject puzzleStuk,int scoreGem,ref bool Visibility)
{
//method stuff
Visibility = false;
}
,然后像下面这样调用您的方法:
SlotCheck("Red", "red_small_c", puzzle_9, GameControl.control.scoreRedGems, ref GameControl.control.stone_9);
答案 1 :(得分:3)
我相信您的印象是,更改参数的值将反映给调用者(您的第一个代码块)。除非您为参数/参数使用ref
或out
,否则情况并非如此。只要GameControl.control.stone_9
是一个字段而不是一个属性,它就会起作用。
简而言之,除非使用那些关键字,否则参数将按值传递。 (对于引用类型,这也是正确的,但是要复杂一点,因为复制的是引用,而不是实际对象本身)
其他答案已经解释了语法(参数和参数都必须使用ref
。)
还有一点建议,不要像大多数C#读者那样大写变量或参数,因为它们会在包含类中视为属性,从而引起混乱。
答案 2 :(得分:0)
1-在SlotCheck
中,四个参数应为ref bool Visibility
或
在if
语句中,您应该这样做
GameControl.control.stone_9 = false;