首页 > 解决方案 > Unity C# 中的 IEnumerable 问题?

问题描述

我正在统一制作一个简单的纸牌游戏,遵循教程(我是统一的初学者),一个简单的 IEnumerable 有一个非常奇怪的错误。每当它被调用时,它都会返回一个错误:

NullReferenceException: Object reference not set to an instance of an object
Deck+<GetCards>c__Iterator0.MoveNext () (at Assets/Scripts/Deck.cs:11)
DeckView.ShowCards () (at Assets/Scripts/DeckView.cs:21)
DeckView.Start () (at Assets/Scripts/DeckView.cs:16)

我已经查看了这个错误,并且对编程有一些了解,但我似乎无法理解为什么会发生这种情况。这里有什么问题?

这是有问题的迭代器:

public IEnumerable<int> GetCards(){
    foreach (int i in cards) 
    {
        // DEBUG 
        print (i);

        yield return i;
    }
}

'cards' 是 List 类型,我从这里调用它:

foreach (int i in deck.GetCards()) {
    // some code
}

这是我的设置代码,第 2-6 行应该防止“卡片”为空。这有什么问题吗?

public void Shuffle (){
    if (cards == null) {
        cards = new List<int> ();
    } else {
        cards.Clear ();
    }

    for (int i = 0; i < 40; i++) {
        cards.Add (i);
    }

    int n = cards.Count;

    while (n > 1) {
        n--;
        int k = Random.Range (0, n + 1);
        int temp = cards [k];
        cards [k] = cards [n];
        cards [n] = temp;

    }
}

void Start () {
    Shuffle ();
    print (GetCards ());
}

我在这里犯了什么错误?

标签: c#unity3dienumerableienumerator

解决方案


推荐阅读