2016-11-23 5 views
1

Индексаторы позволяют индексировать экземпляры класса или структуры точно так же, как массивов. Индексаторы напоминают свойства, за исключением того, что их аксессоры принимают параметры .Почему мой индекс не работает?

У меня есть код, как этот

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 я должен получить экземпляр Student в следующих членов s1, s2, потому что я возвращаю объект Student Int индексатор но я получаю нулевую ссылку. Может ли кто-нибудь помочь мне понять, почему это так. Благодаря

+0

Поле 'student' не назначается, пока вы не вызываете сеттер, который вы не делаете в' Main'. – Lee

+0

вам нужен список или массив студентов – McNets

+0

@mcNets Я пытаюсь понять работу Indexer –

ответ

3

После

StudentMemento s = new StudentMemento(); 

s.student будет null. Поле student назначается только в установщике индексатора, поэтому вам нужно вызвать это, прежде чем вызывать геттер, например.

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

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

, но когда я устанавливаю s [1] = null, s1 получает объект Student(). Но как переменная s2 также получает значение, когда я не вызывал сеттер на s [2]. –

+0

@LijinJohn - существует только одно поле поддержки, ваш индексист вообще не использует параметр 'index'. – Lee

+0

Большое вам спасибо за ваше время –

Смежные вопросы