列表与LT; >在词典里面< K,列表与LT; > > (C#)

时间:2017-09-10 21:04:54

标签: c# list dictionary

学生在这里。

处理当前的C#项目。我必须创建一个List<卡>扑克牌和词典<串,列表与LT;卡> >

列表是独立创建的,字典包含卡片集合。可以在集合中添加或删除卡。

我在添加卡片时遇到了麻烦。我从用户输入中得到了列表的索引号,并且我试图根据索引简单地更新字典中的值。

抛出错误的行就在这里。错误是 无法隐式转换类型'< filename.CardClass>'至 System.Collections.Generic.List< filename.CardClass>'

我为我的生活无法弄清楚这意味着什么以及如何解决它。

_collections[input] = _cards[cardSelectionIndex];

这是我目前的代码块:

    public void AddToCollection()
    {
        PrintValuesCollections<string, List<Card>>(_collections);
        Console.WriteLine("Type in the name of the collection to add a card to:");
        string input = Console.ReadLine();

        bool found = _collections.ContainsKey(input);
        if (found)
        {
            Console.WriteLine("List of current cards to choose from:");

            for (int i = 0; i < _cards.Count; i++)
            {
                    Console.WriteLine("Index number:\r\n"+i+"Card Info:\r\n"+_cards[i]+"\n");
            }

            Console.WriteLine("Type in the index of the card from the list to add to the collection:");
            string cardSelection = Console.ReadLine();
            int cardSelectionIndex = 0;
            while (!int.TryParse(cardSelection, out cardSelectionIndex))
            {
                Console.Write("Please enter a number from the list above: ");
                input = Console.ReadLine();
            }

            _collections[input] = _cards[cardSelectionIndex];
            _cards.RemoveAt(cardSelectionIndex);
        }
        else
            Console.WriteLine("Collection name not found.");
    }

2 个答案:

答案 0 :(得分:3)

我认为_collections类型为Dictionary<string, List<Card>>_cardsList<Card>

所以这就是你要做的事情:

//_collections[input] = _cards[cardSelectionIndex];
List<Card> a = _collections[input];
Card b = _cards[cardSelectionIndex];
a = b;

请注意ab的类型。这正确地给出了错误:“Cannot implicitly convert type '< filename.CardClass >' to System.Collections.Generic.List< filename.CardClass >'

您可能想要做的是在该列表中添加一张卡

List<Card> a = _collections[input];
Card b = _cards[cardSelectionIndex];
a.Add(b);

或只是

_collections[input].Add(_cards[cardSelectionIndex]);

答案 1 :(得分:1)

我试着更多地描述你的异常。

您正在创建一个Dictionary<string,List<Card>>,除了唯一密钥访问的KeyValuePair<string,List<Card>>列表之外,别无他法。这意味着您的词典中的每个条目都是由字符串类型的键索引的卡片列表。

例如:

Key | Value
"hearts" | List<Card> {1, 2, 7, 8, Queen}
"spades" | List<Card> {King, Ace}

现在您的例外情况是,您试图用一张卡覆盖一副牌。

这就是你要做的:

List<Card> spades = collection["spades"]; // King, Ace
spades = new Card(Queen); // Your Exception

但这是您可能想要做的事情:

List<Card> spades = collection["spades"]; // King, Ace
spades.Add( Card(Queen) ); // Add an element to the List

现在你的字典看起来像这样:

Key | Value
"hearts" | List<Card> {1, 2, 7, 8, Queen}
"spades" | List<Card> {King, Ace, Queen}

如果你想添加一副&#34;俱乐部&#34;您可以致电:

collection.Add( "clubs", new List<Card> {1, 2, 3, Ace} );

或简称:

collection["clubs"] = new List<Card> {1, 2, 3, Ace};

但是要小心,如果密钥已经在字典中,第一个可以引发重复密钥异常,而第二个密钥异常只会创建一个新条目(如果它不存在或覆盖现有条目)。