1

我正在为一个玩扑克的程序编写代码。我的问题是关于列表中的参考和价值传递。

我的程序有一个 Player 对象、一个 Dealer 对象和一个 PokerTable 对象。PokerTable 有两个玩家列表,一个称为玩家,一个称为获胜者。玩家列表被传递给 Dealer 对象的DetermineWinner 方法,该方法传回包含获胜者(或在平局情况下为获胜者)的列表。PokerTable 然后使用获胜者列表来确定向谁付款。

    class PokerTable
    {
        private Dealer dealer;
        private List<Player> players;
        private List<Player> winners;            

        private void EndHand()
        {
            winners = dealer.DetermineWinner(players);
            PayPlayers();
            winners.Clear();
            PrepareForNextHand();
        }

        private void PayPlayers()
        {
           /* code here uses the winners list to determine
            * how much to pay each winner and adds that money
            * to the player object */
        }

我的问题是向获胜者列表中的玩家对象添加金钱是否也会影响原始玩家列表中的原始玩家对象。

4

1 回答 1

3

List<Player>是对Player对象的引用列表。

如果两个单独列表中的引用指向相同,Player则更新Player一个列表中的 a 似乎也会更改Player另一个列表中的引用。

class Player
{
     internal int Money;
}

// ...

    Player player = new Player{ Money = 700 };
    List<Player> list1 = new List<Player>{player};
    List<Player> list2 = new List<Player>{player};

    list1[0].Money = 400;

    Assert.AreEqual(400, list2[0].Money); // Assertion passes.

另一方面,如果您的列表指向一个值类型,那么更改当然不会反映:

var money = 700;
var list1 = new List<int>{money};
var list2 = new List<int>{money};

list1[0] = 400;

Assert.AreNotEqual(400, list2[0]); // Assertion passes.
于 2012-07-30T17:34:26.117 回答