C#不能保存struct变量的值

voi*_*oid 1 c# struct public

我正在尝试编写一个允许你玩德州扑克的框架程序.而我在使用函数时遇到问题hasPair,决定是否CurrentPlayer有一对:

  public bool hasPair(Player CurrentPlayer)
        {
            bool flag;
            Card[] SevenCards = new Card[7];

            SevenCards[0].Color = CurrentPlayer.Card1.Color;
            SevenCards[0].Number = CurrentPlayer.Card1.Number;
            SevenCards[1].Color = CurrentPlayer.Color2;
            SevenCards[1].Number = CurrentPlayer.Number2;

            SevenCards[2] = Ground.Card1;
            SevenCards[3] = Ground.Card2;
            SevenCards[4] = Ground.Card3;
            SevenCards[5] = Ground.Card4;
            SevenCards[6] = Ground.Card5;

            flag = isThere_Pair(SevenCards); 

            return flag;
        }
Run Code Online (Sandbox Code Playgroud)

这是如何CurrentPlayer收到它的卡:

    public void Deal_Cards(Player Player)
    {
        int Color1, No1, Color2, No2;

        while (true)
        {


        dealhelper1:

            Color1 = (RandomColor.Next() % 4);
            No1 = ((RandomNo.Next() % 13));


            if (CardDeck[Color1, No1].isChosen == true)
            {
                goto dealhelper1;
            }

            if (CardDeck[Color1, No1].isChosen == false)
            {
                Player.Card1.Color = Color1;

                Player.Card1.Number = No1+1;
                Player.Card1.imagePath = CardDeck[Color1, No1].imagePath;

                Player.Color1 = CardDeck[Color1, No1].Color;
                Player.Number1 = CardDeck[Color1, No1].Number;                   

                CardDeck[Color1, No1].isChosen = true;
                break;
            }
        }

        while (true)
        {
            dealhelper2:

            Color2 = (RandomColor.Next() % 4);
            No2 = ((RandomNo.Next() % 13));

            if (CardDeck[Color2, No2].isChosen == true)
            {
                goto dealhelper2;
            }

            if (CardDeck[Color2, No2].isChosen == false)
            {
                CardDeck[Color2, No2].isChosen = true;


                Player.Card2.Color = Color2;
                Player.Card2.Number = (No2)+1;

                Player.Color2 = CardDeck[Color2, No2].Color;
                Player.Number2 = CardDeck[Color2, No2].Number;
                break;
            }
        }

        display_Player_Cards(Player);
    }
Run Code Online (Sandbox Code Playgroud)

但是在hasPair功能中,CurrentPlayer's卡'的数字和颜色都是0.我尝试了不同的方式但是当我在查询中询问时,我无法获得玩家卡的数值,尽管它们已经被函数初始化了Deal_Cards.但是,地面卡没有问题.

有趣的是,display_Player_Cards(Player)功能正常工作(因此它成功获取值并显示卡片).

我使用类型Player(struct)的公共变量,如:

    public Player P1 = new Player();
    public Player AI = new Player();
Run Code Online (Sandbox Code Playgroud)

为什么他们不能保持自己的价值观?我该如何解决这个问题?感谢帮助.

Jar*_*Par 6

你遇到的问题是结构是通过.Net中的值传递的.因此,该Deal_Cards方法接收Player实例的副本并将卡分配给该副本.传递给的原始值Deal_Cards未经修改.

为了解决这个问题,你需要或者使Player一个class或引用传递.我非常推荐制作Player一个class.拥有可变结构只是一条痛苦的道路,很难找到像这样的错误.