C# 关于 dictionary 一些问题?

我想实现这么一个效果:
我有这么一个类
public class Stu
{
public dictionray<int ,homwork> homeworkList = new dictionray<int ,homwork> ();
private void getHomeworkID()
{
实现的代码功能是:获取所有该学生的homework编号, 并将homework的编号 保 存在 homeworkList 字典集合里 但是 homeworklist 的value 全部为null
}
}
public class homework
{
public int id; public string name =" ";
public homeword(int id)
{
// 数据绑定
}
}
问题: 当我调用这个学生的 homeworkList 其中某个value时 系统会自动的 根据 value的 key 创建一个 homework 对象 ,
1.我实例化一个 学生对象 ,
2.在实例化这对象的时候

// 构造函数
public stu
{
进行ADO 操作 ,获取这个学生所有的 homework 信息 ,并返回一个 dataset

foreache(便利dataset)
{
dataset 中 id 这个列的数据 绑定到 homeworkList 这个集合的key 中去 ,并不实力化 homework 对象 让 value 为空

}

}
3. stu s = new stu(id)
// 当我 用key 访问这个 集合的时候 value 为空 对吧
s.homeworkList[1].value 为空
// 我想 实现的效果是
s.homeworkList[1].value 的时候 可以更具 我的 key 实例化一个 homework 对象
原来是想在 homeworkList 的 set 访问器中写的 但是后来发现不可以 所以问想想有什么办法 可以完成这个效果,

homework 类中 也有 包含了其他类, 其他类中也 包含了类 ,如果这么实例化下去 可能很占内存 , 所以我想 , 先让 homeworkList key 存在, value 为空, 当我需要 某个key 的value 的时候 实例化

我不知道我的理解是否正确。。。。暂且就这样认为把。。。

代码是这样的:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            var works=GetDicList();
            for (int i = 1; i < works.Count + 1; i++) //要说明是的works.Count+1,这个是我根据实际情况写的,
                                                      //因为下面对workList赋值i从1开始的,且最后一个也不是一般的<,造成的。。。
            {
                Response.Write("HomeWork编号:"+i+"作业的名字:"+works[i].name+"<br/>");   //根据字典的key获取值
            }
                                                                                                           
        }
    }
    /// <summary>
    /// 对字典集合进行初始化
    /// </summary>
    /// <returns>返回字典集合</returns>
    private Dictionary<int, Homework> GetDicList()
    {
        /**
         *这个是一个实例根据你的说法那个可能是从数据库读取的数据,
         *我不知道你使用SqlDataReader读取直接赋值给这Dictionary集合,还是包装成List<T>在赋值的,
         *这里对reader进行简单的说明
         * **/
        /*Dictionary的初始化*/
        /*var dic=new Dictionary<int, Homework>
            {
                {0, new Homework {id = 1, name = "语文"}},
                {1, new Homework {id = 1, name = "数学"}},
                {2, new Homework {id = 1, name = "英文"}},
                {3, new Homework {id = 1, name = "物理"}}
            };*/
        /*reader赋值方法*/
        /*var _dic = new Dictionary<int, Homework>();
        while (reader.Reade())
        {
            if (!reader.HasRow) continue;
            int key = int.Parse(reader["homeworkId"]);  //读取数据库中的homeworkId作为字典的主键(也是对象Homework的id)
            var homework = new Homework     //定义Homework对象,并进行初始化
                {
                    id = key,
                    name = reader["homeworkName"].toString()
                };
            _dic.Add(key, homework);     //将对象添加到Dictionary集合中
        }*/
        /*假定你包装成了List<T>了,我也不想建一个数据库了。。。有点懒呀!!!!我就动态的添加了*/
        var workList = new List<Homework>();
        for (int i = 1; i <= 20; i++)
        {
            workList.Add(new Homework
                {
                    id = i,
                    name = "魏巍做的作业"+i
                });
        }
        /******
         * workList假定就是你包装好的从数据库中读取的数据,
         *接下来就是进行对集合进行初始化了
         *****/
        var dic = new Dictionary<int, Homework>();
        foreach (var work in workList)
        {
            dic.Add(work.id, work);  //将值添加到Dictionary集合中
        }
        return dic;
    }
    public class Homework
    {
        public int id { get; set; }
        public string name { get; set; }
    }

到这里就OK了,看看效果吧:

搞定了,当然如果你要的是这个效果的话。。。如果是的话不要忘了顶一下啊。。。

需要源码或者疑问请私密。。。。

追问

我问题 描述的不详细 , 我重新写了需求

温馨提示:答案为网友推荐,仅供参考
相似回答