C# 在每个循环中创建一个新对象

C# 在每个循环中创建一个新对象,c#,list,while-loop,C#,List,While Loop,我在数据库连接中有一个while循环,我想从数据库检索的值中创建一个对象。 这是我使用的代码: public void dbConnect() { using (SqlConnection myConnection = new SqlConnection("server=CHAYU\\SQLEXPRESS;" + "Trusted_Connection=yes;" +

我在数据库连接中有一个while循环,我想从数据库检索的值中创建一个对象。 这是我使用的代码:

 public void dbConnect()
    {
        using (SqlConnection myConnection = new SqlConnection("server=CHAYU\\SQLEXPRESS;" +
                                   "Trusted_Connection=yes;" +
                                   "database=restaurantApp; " +
                                   "connection timeout=30"))
        {

            string oString = "Select * from Meal where availability=1";
            SqlCommand oCmd = new SqlCommand(oString, myConnection);
            myConnection.Open();
            using (SqlDataReader oReader = oCmd.ExecuteReader())
            {
                while (oReader.Read())
                {
                    Meal m = new Meal();
                    m.mealID = Convert.ToInt32(oReader["mealId"]);
                    m.mealName = oReader["mealName"].ToString();
                    m.quantity=Convert.ToInt32(oReader["quantity"]);
                    m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]);
                    m.availability = true;


                }

                myConnection.Close();
            }
        }
    }

我希望在每次加载表单时调用此代码,以便在开始时创建对象,然后可以对其进行操作。但是,我的问题是,如何通过在while循环中对对象使用不同的引用变量来做到这一点?

您想每餐都吃一顿吗?创建一个列表,并在其中迭代时存储您的用餐对象

List<Meal> mList = new List<Meal>();
while (oReader.Read())
{
    Meal m = new Meal();
    m.mealID = Convert.ToInt32(oReader["mealId"]);
    m.mealName = oReader["mealName"].ToString();
    m.quantity = Convert.ToInt32(oReader["quantity"]);
    m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]);
    m.availability = true;
    mList.Add(m);
}
List mList=new List();
while(oReader.Read())
{
餐m=新餐();
m、 mealID=Convert.ToInt32(或阅读器[“mealID”]);
m、 mealName=oReader[“mealName”].ToString();
m、 数量=转换为32(或读取器[“数量]);
m、 timeToProduce=Convert.ToInt32(或阅读器[“timeToProduce”]);
m、 可用性=真;
m列表添加(m);
}

将循环中创建的每个对象添加到列表中。默认情况下,在循环中创建的每顿饭都是一个不同的引用,但您不会将它们存储在任何地方以供以后操作。

使用此扩展方法获取datareder类中的对象列表

public static List<T> DataReaderMapToList<T>(IDataReader dr)
{
    List<T> list = new List<T>();
    T obj = default(T);
    while (dr.Read()) {
        obj = Activator.CreateInstance<T>();
        foreach (PropertyInfo prop in obj.GetType().GetProperties()) {
            if (!object.Equals(dr[prop.Name], DBNull.Value)) {
                prop.SetValue(obj, dr[prop.Name], null);
            }
        }
        list.Add(obj);
    }
    return list;
}
公共静态列表数据读取器列表(IDataReader dr)
{
列表=新列表();
T obj=默认值(T);
while(dr.Read()){
obj=Activator.CreateInstance();
foreach(obj.GetType().GetProperties()中的PropertyInfo属性){
如果(!object.Equals(dr[prop.Name],DBNull.Value)){
属性设置值(obj,dr[属性名称],null);
}
}
列表。添加(obj);
}
退货清单;
}
然后像这样使用它

List<Meal> MealList = new List<Meal>();
MealList = DataReaderMapToList<Meal>(reader);
List-MealList=new List();
MealList=数据读取器列表(读取器);

您的问题不清楚。。。但听起来你应该创建一个集合……不要使用select*PLS,只选择你需要的。@Praveen绝对不是ArrayList@谢谢你纠正我。事实上,我出错了如果我想编辑对象的属性值,我可以在它进入列表后进行编辑吗?是的,通过它的索引
mList[0]访问它或通过Linq
mList.Where(x=>x.mealID==10.First().mealName=“Chips”