DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(String));
            dt.Rows.Add(new Object[] { "A" });
            ds.Tables.Add(dt);
            Cache["Test"] = ds;
            DataSet ds1 = (DataSet)Cache["Test"];
            ds1.Tables[0].Rows.Add(new Object[] { "B" });            DataSet ds2 = (DataSet)Cache["Test"];以上是,我先生成一个Dataset再保存到cache中
然后新生成一个ds1为cache的内容
我更改了这个新ds1为什么cache的内容也跟着更改呢最后的ds2和ds1一样,而不是和ds一样这是为什么呢..怎么办cache才不会被更改谢谢

解决方案 »

  1.   

    DataSet.clone我知道
    但我不理解的是为什么Cache会跟着变谢谢
      

  2.   

    DataSet dst = (DataSet)Cache.Get("CachedDataSet");
            if (dst == null)
            {
                 Cache.Insert("CachedDataSet", dst, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
            }
            else
            {
              
             }
      

  3.   

    因为它是引用类型啊,DataSet ds1 = (DataSet)Cache["Test"];
    这样做只是复制了一个Cache["Test"]的引用给ds1,
    Cache["Test"]和ds1都是指向托管堆的同一个数据
    所以用任意一个进行修改都会改变托管堆的内容
      

  4.   

    因为是同一个对象  不管你改变谁 都有影响              DataSet ds1 = (DataSet)Cache["Test"].clone;
                ds1.Tables[0].Rows.Add(new Object[] { "B" });这样就行了
      

  5.   

    Cache里存放的是ds1的引用地址,而不是真正的ds1对象