static List<Beneficiary> beneficiary = new List<Beneficiary>();
static Dictionary<int, List<Beneficiary>> dic;page_load()
{
 dic = new Dictionary<int, List<Beneficiary>>();
}dic.Add(1, beneficiary);在我看来dic[1] 应该和beneficiary没有任何关系的,
可是如果我把beneficiary用clear()清除,dic[1]也会被清除
把dic[1]用clear()清除,beneficiary也会被清除
为什么这两个会连在一起。我是想用按钮 点击之后从dic中用key取出beneficiary 绑定到datalist
再点击修改后将修改后的beneficiary 继续保存在dic中
所以我是希望每次点击按钮绑定前先将beneficiary 清除,再将dic[1]赋值给beneficiary

解决方案 »

  1.   

    page_load()
    {
     dic = new Dictionary<int, List<Beneficiary>>();
    }你点击按钮会回发,执行pageload事件,字典初始化了
    应该放在 if(!isPostBack)里面
      

  2.   

    我现在只能是先循环beneficiary在将里面的对象一个个加到dic[1]中,或者是循环dic[1]加到beneficiary中。我想应该是它们两个都是引用类型,所以当一个beneficiary被clear()时同时清除了它所引用的地址的内容,所以dic[1]也被清除了
      

  3.   

    我的dic实例化是写在!ispostback中的,只是刚才发帖的时候忘了
    虽然我自己也想到了,但是不能给自己加分看在两位这么辛苦的回帖,就把分给两位吧。
      

  4.   


    基本上是这个意思。但是不要滥用“地址”这个概念。引用并不代表着就是地址,.net的引用绝非一个地址,而是一个复杂的引用对象。同时,清除的也绝非什么“引用的地址的内容”,而是引用所指向的对象的内容。把c++的地址概念胡乱套用到.net的引用上,虽然个别不求甚解的时候可以用来打比喻,但是当你求甚解的时候就会造成许多错误理解。