无法将带有 [] 的索引应用于 'type' 类型的表达式

Cannot apply indexing with [] to an expression of type 'type'

大家好!我是编程新手,希望得到您的帮助!我正在尝试 return 和数组的索引,但不知道错误是什么意思。我第一次得到这个。

这是我的第一个class

using System;
using System.Linq;

public class Group
{
private Student[] students;

public Group(Student[] students)
{
    if(students.Length < 5)
    {
        throw new ArgumentException("Incorrect group");
    }

    this.students = students;
}

public int IndexOfMaxGrade()
{
    Student[] sorted = students.OrderBy(c => c.grade).ToArray();
    //int max = sorted[^1].grade;

    //foreach (var item in students)
    //{
    //    if(item.grade == max)
    //    {
            
    //    }
    //}

    return Array.IndexOf(students, sorted[^1].grade);
}

public int IndexOfMinGrade()
{
    Student[] sorted = students.OrderBy(c => c.grade).ToArray();

    return Array.IndexOf(students, sorted[0].grade);
}
}

我在这段代码(最后两行)中遇到了“无法将 [] 的索引应用于类型 'type' 的表达式”

    Group studentGroup;

    try
    {
        studentGroup = new Group(students.ToArray());
    }
    catch (ArgumentException argumentException)
    {
        Console.WriteLine(argumentException.Message);
        return;
    }

    Console.WriteLine(studentGroup[studentGroup.IndexOfMinGrade()]);
    Console.WriteLine(studentGroup[studentGroup.IndexOfMaxGrade()]);
}
}

如果你想直接索引一个 Group,你必须提供一个索引器:

public class Group
{
  public Student this[int i]{
    get { return students[i]; }
    set { students[i] = value; }
  }
  ...

你看,你的小组有一个学生数组,但这并不意味着它本身可以像数组一样直接索引..

你什么时候做的:

Group studentGroup = ...

您稍后尝试访问组内某个索引处的内容:

studentGroup[studentGroup.IndexOfMinGrade()];     //like this
studentGroup[1];                                  //or like this, for example

C# 不会查看您的组类型并认为“它内部只有一个数据项,这是一个数组,所以我会允许有人在实例旁边放置一个索引说明符,如 [1]一个组,我将从内部数组中检索该项目"..

..它只是说“无法索引组”


如果你添加了一个索引器,那么祝你好运。你也可以这样做:

class Group{
  ...

  public Student GetStudentAt(int index){
    return students[index];
  }

然后调用:

  Console.WriteLine(studentGroup.GetStudentAt(studentGroup.IndexOfMinGrade()));

概念上等同..