无法跟踪“索引超出范围”异常的原因

时间:2019-12-26 00:14:40

标签: c# list

所以,我有这个科学怪人:

var unsorted = new List<(Hand, List<Card>)>();

当我尝试像这样添加smt时:

unsorted.Add((hand, _tempList));

我收到并出错

  

索引超出范围。必须为非负数并且小于集合的大小。 (参数“索引”)

如果我事先不知道将存储多少个项目,如何正确初始化此列表?

根据评论请求:

_tempList = IsStraightFlush(theValueHand);
            if (_tempList.Count == 5)
            {
                unsorted.Add((hand, _tempList));
                continue;
            }

我在其中向元组添加列表的功能

        private List<Card> IsStraightFlush(List<Card> hList)
        {
        var st = 0;
        _tempList.Clear();


        foreach (var t in hList)
        {
           ...
        }
        if (_tempList.Count < 5)
        {
            return new List<Card>();
        }

       hList = _tempList.ToList();
        _tempList.Clear();

        for (var i = 0; i < hList.Count - 2; i++)
        {
           ...
            if (st == 4)
            {
                _tempList.Add(hList[i + 1]);
                return _tempList;
            }
        }

        st = 0;
        _tempList.Clear();
        if (hList[0].Value == 13) //Ace through 5
            for (int i = hList.Count - 1, j = 0; i > 0; i--, j++)
            {
              ...
                if (st == 4)
                {
                    _tempList.Add(hList.First());
                    return _tempList.OrderBy(x => x.Value).ToList(); 
                }
            }
        return new List<Card>();
        }

当我使用它时

resultHands.AddRange(SortStraightFlushes(unsorted));

...

        private List<(int, Hand)> SortStraightFlushes(List<(Hand, List<Card>)> hList)
    {
        var sortedHList = hList.OrderBy(x => x.Item2[0].Value).ToList();
        List<(int, Hand)> output = new List<(int, Hand)>();
        for (int i = 0; i < sortedHList.Count; i++)
        {
            if(i != sortedHList.Count - 1)
                if (sortedHList[i].Item2[0].Value == sortedHList[i + 1].Item2[0].Value)
                    output.Add((1, sortedHList[i].Item1));
                else
                    output.Add((0, sortedHList[i].Item1));
            else
                output.Add((0, sortedHList[i].Item1));
        }
        return output;
    }

enter image description here

1 个答案:

答案 0 :(得分:0)

我不知道它到底有多美观和准确,但一切都可以算出:

unsorted.Add((hand, new List<Card>().Concat(_tempList).ToList()));