我是个菜鸟,请教大侠们个问题,定义的 student 索引为什么用不了?namespace ask_索引疑问
{
    class Program
    {
        /// <summary>
        /// 学生性别(枚举)
        /// </summary>
        public enum Genders { Male, Female }
        
        /// <summary>
        /// 学生类
        /// </summary>
        class Student
        {
            public Student(string name, int age, Genders gender, string hobby)
            {
                this.name = name;
                this.age = age;
                this.genders = gender;
                this.hobby = hobby;
            }
 
            private string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            private int age;
            public int Age
            {
                get { return age; }
                set
                {
                    if (age >= 18 && age < 100)
                    {
                        age = value;
                    }
                    else
                    {
                        age = 20;
                    }
                }
            }
            private string hobby;
            public string Hobby
            {
                get { return hobby; }
                set { hobby = value; }
            }
            private Genders genders;
            public Genders Gdnder
            {
                get { return genders; }
                set { genders = value; }
            }            public void SayHi()
            {
                Console.WriteLine("我叫{0},今年{1},我是{2},我喜欢{3}", Name, Age, Gdnder, Hobby);
            }
        }
        
        /// <summary>
        /// 班级类
        /// </summary>
        class MyClass
        {
            public MyClass(string name)
            {
                this.name = name;
                this.students = new Student[3];
                students[0] = new Student("A", 23, Genders.Female, "看书");
                students[1] = new Student("B", 28, Genders.Male, "跳舞");
                students[2] = new Student("C", 22, Genders.Female, "唱歌");
            }            //班级名称
            private string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            //学员集合
            private Student[] students;
            public Student[] Students
            {
                get { return students; }
                set { students = value; }
            }            //添加索引
            public Student this[int index]
            {
                get { return students[index]; }
            }
            /// <summary>
            /// 添加索引
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public Student this[string name]
            {
                get
                {
                    int i;
                    bool found = false;
                    for (i = 0; i < students.Length; i++)
                    {
                        if (students[i].Name == name)
                        {
                            found = true;
                            break;
                        }
                    }
                    if (found)
                    {
                        return students[i];
                    }
                    else
                    {
                        return null;
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            MyClass myClass = new MyClass("class-1");
            myClass.Students[2].SayHi();
            myClass.Students["B"].SayHi();//为什么会报错!!!!索引为什么用不了??           
            Console.ReadKey();
        }
    }
}

解决方案 »

  1.   

    myClass.Students["B"].SayHi();//为什么会报错!!!!索引为什么用不了??  
    索引不是这样用的
    你的索引是给MyClass定义的,自然要用在MyClass的对象上
    要这样:
    myClass["B"].SayHi();
    myClass[2].SayHi();
      

  2.   

    ...
    for (i = 0; i < students.Length; i++)
      {
      if (students[i].Name == name)
      {
      found = true;
      break;
      }
      }
      if (found)
      {
      return students[i];
      }
      else
      {
      //return null; 没找到应该继续找,直接return就退出方法了
         continue;
      }
      return null; //移到循环外面去,遍历完了还没找到才返回null
      }
    }
      

  3.   

    1L正解,不过提醒下LZ,int索引器里的get和set里最好要判断下索引是否在范围内