0

当我尝试从另一个类的列表中访问项目时,我收到错误:

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

我是否也需要在另一个(或相同的)列表中设置访问器,还是我的代码有问题?

WordList.cs 已
更新

    private List<string> words = new List<string>();
    private List<string> anagrams = new List<string>();

    public void addword(string word)
    {
        Words.Add(word);
        Anagrams.Add(anagram(word)); //Note: 'anagram' is a  (public) String which makes an anagram of the word, and returns it
    }
    public List<string> Words
    {
        get
        { return words; }
    }
    public List<string> Anagrams
    {
        get
        { return anagrams; }
    }

game.cs 更新

    public void newword()
    {
        WordList list = new WordList();
        Random rnd = new Random();
        int num = rnd.Next(0, WordList.Anagrams.Count);
        info.Text = "The anagram is " + list.Anagrams[num] + " guess the original word";
    }

注意:我仍然得到同样的错误

4

3 回答 3

1

错误在 - 行list.Anagrams[num]

num超出范围,因为list.info.Count可能大于list.Anagrams.Count哪个导致生成的数字大于字谜列表计数。

代替

int num = rnd.Next(0, WordList.info.count);

它应该是 -

int num = rnd.Next(0, list.Anagrams.count);

此外,在您的方法中,您正在初始化一个新列表

 WordList list = new WordList();

但是您没有在其Anagrams列表中添加任何内容,因此它是count is 0. 因此,除非您将项目添加到此列表,否则索引器将不适用于此列表。

这应该工作 -

public void newword()
{
    WordList list = new WordList();
    list.Anagrams.Add("Test1");  <-- Add items to list before accessing it
    list.Anagrams.Add("Test2");
    list.Anagrams.Add("Test3");
    Random rnd = new Random();
    int num = rnd.Next(0, list.Anagrams.Count);
    info.Text = "The anagram is " + list.Anagrams[num] +
                 " guess the original word";
}
于 2013-10-19T08:58:12.900 回答
1

我宁愿用

   int num = rnd.Next(0, list.Anagrams.Count - 1)

因为列表的计数总是大于最后一个索引。编辑: Random.Next 的第二个参数是包含上限,不排除。

于 2013-10-19T09:44:45.900 回答
0

只需在一个表格上试一下——应该可以——我认为 :)

于 2013-11-10T15:25:13.880 回答