C# 表索引超出范围,尽管表大于索引

C# 表索引超出范围,尽管表大于索引,c#,arrays,sorting,C#,Arrays,Sorting,我正在做一个简单的匹配游戏,我想输出一个排行榜,但是我得到了一个异常数组索引。在调试中,虽然它说表的大小是3,并且i和j都是0和1,但这对我来说很奇怪,因为这并不超出范围,因为数组大小是3。这是我的代码,用于按highscore将对象数组从最大到最小排序,感谢您的帮助 for(int i = 0; i<tabUporabnikov.Length-1; i++) { for(int j = (i+1); j<tabUporabnikov.Le

我正在做一个简单的匹配游戏,我想输出一个排行榜,但是我得到了一个异常数组索引。在调试中,虽然它说表的大小是3,并且i和j都是0和1,但这对我来说很奇怪,因为这并不超出范围,因为数组大小是3。这是我的代码,用于按highscore将对象数组从最大到最小排序,感谢您的帮助

 for(int i = 0; i<tabUporabnikov.Length-1; i++)
        {

            for(int j = (i+1); j<tabUporabnikov.Length; j++)
            {
                if (tabUporabnikov[i].highscore < tabUporabnikov[j].highscore)
                {
                    Uporabnik[] zacasna = new Uporabnik[1];
                    zacasna[1] = tabUporabnikov[j];
                    tabUporabnikov[j] = tabUporabnikov[i];
                    tabUporabnikov[i] = zacasna[1];
                }

            }

        }

for(int i=0;i它应该是
zacasna[0]
。在这种情况下,Aray只能有一个值,数组以索引0开头。因此它应该是
zacasna[0]
。最好声明一个变量而不是数组,因为您只需要存储值。将其声明为
Uporabnik zacasna

我假设
zacasna
有0或1个项目的空间。您正在尝试设置
zacasna[1]
即使您刚刚用一个元素创建了它。但不清楚为什么要在那里创建数组。为什么不只是一个局部变量
Uporabnik tmp=tabUporabnikov[j];
?(然后将
tabUporabnikov[i]=tmp;
设置为块中的最后一行)。它应该是
zacasna[0]
。最好声明一个变量而不是数组。因此请注意,.NET中有内置的排序方法-除非您的目的是了解如何实现排序,否则我建议使用
数组.sort
或LINQ。是的,我尝试使用System.LINQ,但在将其嵌入环境中时遇到问题。我还不知道如何执行ecouse当我尝试它时,它崩溃了我所有的文件,我不得不从备份中重新开始。感谢它解决了我的问题。起初我甚至不知道它为什么解决了这个问题,但现在我明白了为什么。