Grey Sun
2016-01-10 08:37
采纳率: 100%
浏览 2.4k

C# 变量赋值与改变问题

图片说明
图片说明
如上面的图片所示
将一个全局变量players[n]赋值给局部变量player
然后对局部变量play进行设置 赋值
然后发现全局变量players[n]也跟着改变了
这是为什么?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 忧郁王子锋少 2016-01-11 06:38
    已采纳

    这还用说吗,最基本的,你没有搞清楚引用类型的赋值,先上图
    图片说明
    图片说明

    引用类型变量的赋值: 引用类型变量中保存的是“指向实际数据的引用指针”。在进行赋值操作的时候,它和值类型一样,也是先有一个复制的操作,不过它复制的不是实际的数据,而是引用(真实数据的内存地址)。

    所以引用类型的变量在赋值的时候,赋给另一变量的实际上是内存地址。这样赋值完成后,2个引用变量中保存的是同一引用,他们的指向完全一样。

    点赞 评论
  • Grey Sun 2016-01-10 08:40
             public BOOLEAN SecondLevel(int noPlayer, bool bID)
            {
                Player player = players[noPlayer];
    
                if (bID)
                {
                    Random rand = new Random();
    
                    if (CheckID(player).Count == 0)
                        return BOOLEAN.FALSE;
    
                    switch (CheckID(player).Count)
                    {
                        case 1:
                            player.IDSet(CheckID(player)[0]); break;
                        default:
                            {
                                int team = rand.Next(noPlayer);
                                player.IDSet(GasesAndChooseType(players[team], CheckID(player)));
                            } break;
                    }
    
                    player.Hand.Remove(player.Identity_Card.Key);
    
                    return BOOLEAN.FULL;
                }
                else
                {
                    return LifeSkillSetAI(player);
                }
            }
    
    
    点赞 评论
  • 微wx笑 2016-01-10 10:13

    你传递操作是一个类对象 吧?这涉及到值传递和引用传递的问题;

    点赞 评论