我是个菜鸟,请教大侠们个问题,定义的 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();
}
}
}
{
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();
}
}
}
索引不是这样用的
你的索引是给MyClass定义的,自然要用在MyClass的对象上
要这样:
myClass["B"].SayHi();
myClass[2].SayHi();
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
}
}