none
List<T> 中removerange 的使用问题 RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace test
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Card> cards = new List<Card>();
                for (int suit = 0; suit <= 3; suit++)
                    for (int value = 1; value <= 13; value++)
                        cards.Add(new Card((Suits)suit , (Values)value));
    //初始化  4种花色,A到K 13种面值  共计52张牌的一个集合

                List<Card> deck = new List<Card>();
                deck = cards;

                deck.RemoveRange(0, 13);
                cards.RemoveRange(13, 26);

                foreach (Card each in cards)
                    Console.WriteLine(each.ToString());
                Console.ReadLine();
            }
        }
    }

    以上是我的代码,输出的结果 只有一个 花色的13 张牌

    按照我的想法,对Cards 这个集合,我只删去了从第13张牌开始的往后的26张牌,应该会显示 剩余的两种花色 共计26张牌

    感觉上有点像指针,Cards和deck 指向同一个对象,操作指针 改变了其指向对象的值。

    不知道这算是一个BUG ,还是我的代码 思路有问题,请大家指教。

    2013年7月25日 2:08

全部回复

  • 你的deck和cards是同一个对象,因此你只要使用一个对象操作即可(譬如你只要删除13张牌的往后26张牌),那么:

             static void Main(string[] args)
             {
                 List<Card> cards = new List<Card>();
                 for (int suit = 0; suit <= 3; suit++)
                     for (int value = 1; value <= 13; value++)
                         cards.Add(new Card((Suits)suit , (Values)value));
                 cards.RemoveRange(13, 26);
    
                 foreach (Card each in cards)
                     Console.WriteLine(each.ToString());
                 Console.ReadLine();
             }

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年7月28日 2:28
    版主