System.Array不包含Add的定义

时间:2014-12-08 05:34:19

标签: c# arrays compiler-errors

我正在创造一个二十一点游戏,到目前为止,我已经制作了一个卡片类,甲板课和鞋类。卡类工作甲板类工程,鞋类工作,但我仍在我的手工作。我创建了一个方法,如果手中已有MAX_CARDS牌,则抛出异常,否则它会将牌加到手牌上并递增_cardCount但由于某些原因,我的代码_hand.Add(card)表示

  

System.Array不包含Add。

的定义

理解正确方向的任何帮助或指导

这是我手工课上的内容

class Hand
{
    const Int32 MAX_CARDS = 12;

    private Card[] _hand = new Card[MAX_CARDS];
    private Int32 _cardCount = 0;

    public Int32 CardCount
    {
        get
        {
            return _cardCount;
        }
    }

    public void AddCard(Card card)
    {
        if (_cardCount >= MAX_CARDS)
        {
            throw new Exception("Cannot of more than 12 cards in a hand");
        }
        else
        {
            _hand.Add(card);
            _cardCount++;
        }
    }

    public Card GetCard(Int32 cardIndex)
    {
        if (cardIndex >= _cardCount)
        {
            throw new Exception("Invalid Entry");
        }
        else
        {
            return _hand[cardIndex];
        }
    }

    Int32[] cardValues = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };
    String[] cardSymbols = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };

    private Int32 SymbolToValue(String symbol)
    {
        int index = Array.IndexOf(cardSymbols, symbol);
        if (index != -1)
        {
            return cardValues[index];
        }
        else
        {
            throw new Exception("Value Not In Table");
        }
    }

    public Int32 GetSum()
    {
        int value = 0;
        Boolean aceflag;
        for (int i = 0; i < _hand.Length; i++)
        {
            value += SymbolToValue(_hand[i].Value);
            if (String.Equals(_hand[i].Value, "A"))
            {
                aceflag = true;
            }
            else
            {
                aceflag = false;
            }
            if (aceflag == true && value <= 21)
            {
                value = value + 10;
            }
        }
        return value;
    }
}

3 个答案:

答案 0 :(得分:1)

c#中的数组大小是不可变的,所以我建议改用List。

private List<Card> _hand = new List<Card>(MAX_CARDS);

答案 1 :(得分:0)

我认为您的代码存在很多问题,但如果您真的想按照自己的方式执行此操作,请使用索引添加项目:

public void AddCard(Card card)
{
    if (_cardCount >= MAX_CARDS)
    {
        throw new Exception(string.Format("This hand already contains {0} cards, " +
            "which is the maximum.", MAX_CARDS));
    }
    else
    {
        _hand[_cardCound] = card;
        _cardCount++;
    }
}

答案 2 :(得分:-1)

在这里输入代码我们创建一个新的List,其中包含已存在的数组中的元素。我们使用List构造函数并将其传递给数组。 List接收此参数并从中填充其值。

警告:数组元素类型必须与List元素类型匹配,否则编译将失败。

将数组复制到List:C#

的程序
using System;
using System.Collections.Generic;

class Program
{

    static void Main()
    {

        int[] arr = new int[3]; // New array with 3 elements

        arr[0] = 2;


        arr[1] = 3;

        arr[2] = 5;

        List<int> list = new List<int>(arr); // Copy to List

        Console.WriteLine(list.Count);       // 3 elements in List

     }

}


Output : 3

数组不适合你的代码在c#list中使用数组不是一个好选择。所以使用列表类型数据。您可以使用列表并存储此对象中的每个类型数据并将其转换为任何类型,您还可以使用循环从列表中获取单个数据。它很容易使用和实现,所以使用列表它很好,很容易代码。

首先,我们声明一个int值列表。我们创建一个未指定大小的新列表,并为其添加四个素数。值以添加的顺序存储。还有其他方法可以创建列表 - 这不是最简单的。

using System.Collections.Generic;

class Program
{

  static void Main()

   {

     List<int> list = new List<int>();

     list.Add(2);

     list.Add(3);

     list.Add(5);

     list.Add(7);

   }

}