布尔值,因为方法参数未更改状态

时间:2019-01-01 20:41:30

标签: c# methods boolean

我想更改函数中布尔值的状态。我的函数有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。

3 个答案:

答案 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)

我相信您的印象是,更改参数的值将反映给调用者(您的第一个代码块)。除非您为参数/参数使用refout,否则情况并非如此。只要GameControl.control.stone_9是一个字段而不是一个属性,它就会起作用。

简而言之,除非使用那些关键字,否则参数将按值传递。 (对于引用类型,这也是正确的,但是要复杂一点,因为复制的是引用,而不是实际对象本身)

其他答案已经解释了语法(参数和参数都必须使用ref。)

还有一点建议,不要像大多数C#读者那样大写变量或参数,因为它们会在包含类中视为属性,从而引起混乱。

答案 2 :(得分:0)

1-在SlotCheck中,四个参数应为ref bool Visibility

if语句中,您应该这样做

GameControl.control.stone_9 = false;