Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将多个属性添加到IEnumerable列表中<;学生>;_C#_Ienumerable - Fatal编程技术网

C# 如何将多个属性添加到IEnumerable列表中<;学生>;

C# 如何将多个属性添加到IEnumerable列表中<;学生>;,c#,ienumerable,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
,在该类中,它具有以下属性:

      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; }
            } 

    }
班级学生:IEnumerable
{
私人年龄=0;
私有字符串名称=”;
private bool isAdult=假;
List StudentList=新列表();
公立学生本[int索引]
{
获取{return StudentList[index];}
集合{StudentList.Insert(索引,值);}
}
公共IEnumerator GetEnumerator()
{
return StudentList.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
返回此.GetEnumerator();
}
公共字符串名
{
获取{返回名称;}
设置{name=value;}
} 
公共信息
{
获取{返回年龄;}
设置{age=value;}
} 
公共图书馆
{
获取{return isAdult;}
设置{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"])
    }
}
//...
/。。。
尝试
ListStudentList=新列表();{
OracleCommand=新的OracleCommand(sqlQuery,连接);
OracleDataReader OracleDataReader=command.ExecuteReader();
while(oracleDataReader.Read()){
age=Convert.Int64(oracleDataReader[“age”]);
name=oracleDataReader[“name”].toString();
isAdult=Convert.boolean(oracleDataReader[“isAdult”])
}
}
//...
假设查询返回100个student,student类实际上包含10-15个属性,我只拿3个(name,age,isAdult)作为例子来解释我的问题


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

主要问题是
Student
类试图实现
IEnumerable
接口。那没有道理。
IEnumerable
接口应该由其他类实现。或者使用实现此接口的
List
类。
Student
类应仅包含您要保存的关于某个学生的值

假设您在while循环的某个地方只有一个
List
对象,您可以迭代数据库中的行,创建一个新的
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);
}
IList students=new List();
while(oracleDataReader.Read()){
int age=Convert.Int64(oracleDataReader[“age”]);
字符串名称=oracleDataReader[“name”]。toString();
bool isAdult=Convert.boolean(oracleDataReader[“isAdult”]);
学生=新生{
年龄=年龄,
name=name,
isAdult=isAdult
};
学生。添加(学生);
}

然后您可以使用
学生
列表。

主要问题是
学生
类试图实现
IEnumerable
接口。那没有道理。
IEnumerable
接口应该由其他类实现。或者使用实现此接口的
List
类。
Student
类应仅包含您要保存的关于某个学生的值

假设您在while循环的某个地方只有一个
List
对象,您可以迭代数据库中的行,创建一个新的
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);
}
IList students=new List();
while(oracleDataReader.Read()){
int age=Convert.Int64(oracleDataReader[“age”]);
字符串名称=oracleDataReader[“name”]。toString();
bool isAdult=Convert.boolean(oracleDataReader[“isAdult”]);
学生=新生{
年龄=年龄,
name=name,
isAdult=isAdult
};
学生。添加(学生);
}

然后你可以使用你的
学生
列表。

属性?我没有看到属性。@RandRandom抱歉,属性意味着属性,我们国家的语言有点不同,我们称之为属性属性,我编辑了问题以匹配多国英语。顺便说一句,您应该重新评估数据库中的“年龄”列存储生日并基于此计算年龄更明智。@RandRandom没有名为“年龄”的列我只是使用虚拟列名来解释我的目标。感谢您提供的信息和建议什么是
Convert.Int64
Convert.boolean
toString
?属性?我没有看到属性。@RandRandom抱歉,属性意味着属性,我们国家的语言有点不同,我们称之为属性属性,我编辑了问题以匹配多国英语。顺便说一句,您应该重新评估数据库中的“年龄”列存储生日并基于此计算年龄更明智。@RandRandom没有名为“年龄”的列我只是使用虚拟列名来解释我的目标。感谢您提供的信息和建议什么是
Convert.Int64
Convert.boolean
toString
?更有意义,我用
IEnumerable
代替
DataTable
,因为我听说IEnumerable更好,更有意义,我用
IEnumerable
来代替
DataTable
,因为我听说IEnumerable更好