如何将多个属性添加到IEnumerable <student>的List中

时间:2017-11-24 22:06:30

标签: c# ienumerable

我创建了一个类Student,并且在类中它具有​​以下属性:

      class Student: IEnumerable<Student>
    {
    private int age =0 ;
    private string name ="";
    private bool isAdult = false;


List<Student> StudentList = new List<Student>();

        public Student this[int index]
        {
            get { return StudentList [index]; }
            set { StudentList .Insert(index, value); }
        }

        public IEnumerator<Student> GetEnumerator()
        {
            return StudentList.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator();
        }


    public string Name 
            {
                get { return name ; }
                set { name = value; }
            } 

    public int Age 
            {
                get { return age ; }
                set { age = value; }
            } 
    public bool IsAdult 
            {
                get { return isAdult ; }
                set { isAdult = value; }
            } 

    }

现在我想做的是在新的学生列表中加载oracle查询的结果

//...
try

List < Student > StudentList = new List < Student > (); {

    OracleCommand command = new OracleCommand(sqlQuery, connection);
    OracleDataReader oracleDataReader = command.ExecuteReader();
    while (oracleDataReader.Read()) {

        age = Convert.Int64(oracleDataReader["age"]);
        name = oracleDataReader["name"].toString();
        isAdult = Convert.boolean(oracleDataReader["isAdult"])
    }
}
//...

让我们说查询返回100名学生,学生班实际上包含10-15个属性,我只用3(姓名,年龄,成人)作为例子来解释我的问题

是否可以在查询中每个返回的行中加载StudentList

1 个答案:

答案 0 :(得分:3)

主要问题是您的Student类尝试实现IEnumerable<Student>接口。这没有意义。 IEnumerable<Student>接口应该由其他一些类实现。或者您使用实现此接口的List<...>类。 Student类应该只包含您要为学生保存的值。

假设你在while循环的某个地方只有一个List<Student>对象,你可以迭代数据库中的行,创建一个新的Student对象并将其添加到列表中。

IList<Student> students = new List<Student>();
while (oracleDataReader.Read()) {

    int age = Convert.Int64(oracleDataReader["age"]);
    string name = oracleDataReader["name"].toString();
    bool isAdult = Convert.boolean(oracleDataReader["isAdult"]);

    Student student = new Student {
        age = age,
        name = name,
        isAdult = isAdult
    };
    students.Add(student);
}

然后,您可以使用students列表。