C# 为什么我的索引器不工作?

C# 为什么我的索引器不工作?,c#,indexer,C#,Indexer,索引器允许对类或结构的实例进行索引,就像 数组。索引器与属性相似,只是它们的访问器采用 参数 我有这样的代码 class StudentMemento { Student student; public Student this[int index] { get { return student; } set { student = new Student { time = DateTime.

索引器允许对类或结构的实例进行索引,就像 数组。索引器与属性相似,只是它们的访问器采用 参数

我有这样的代码

class StudentMemento
    {
        Student student;
        public Student this[int index]
        {
            get { return student; }
            set { student = new Student { time = DateTime.Now }; }
        }
    }
    class Client
    {
        static void Main()
        {
            StudentMemento s = new StudentMemento();
            Student s1 = s[1];
            Student s2 = s[2];
            Student s3 = s[1];
            Console.Read();
        }
    }
根据msdn中的文档,我应该在以下成员s1、s2中获得Student的实例,因为我在索引器中返回Student int的对象,但我得到的是空引用。谁能帮我理解,为什么会这样。谢谢

之后

StudentMemento s = new StudentMemento();

s、 学生将被
null
student
字段仅在索引设置器中分配,因此您需要在调用getter之前调用该字段,例如

StudentMemento s = new StudentMemento();
s[1] = null;

Student s1 = s[1];
Student s2 = s[2];
Student s3 = s[1];

在调用setter之前,
student
字段不会被分配,而您在
Main
中没有这样做。您需要一个students@mcNets我试图理解Indexer的工作原理,但当我设置s[1]=null时,s1得到一个Student()对象。但是当我没有在s[2]@LijinJohn上调用setter时,变量s2是如何得到值的?只有一个支持字段,您的索引器根本不使用
index
参数。