protected void Button2_Click(object sender, EventArgs e)
{
Label1.Text = "";
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
Application.Add("app1", list); List<string> list2 = Application["app1"] as List<string>; //移除app1,输出然后是正常的,也就是说移除application对象不影响list,list是新复制的对象
Application.Remove("app1");
foreach (string item in list2)
{
Label1.Text += item + "<br />";
}
}
protected void Button3_Click(object sender, EventArgs e)
{
Label1.Text = "";
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
Application.Add("app1", list); //取出app1并添加一个3
List<string> list3 = Application["app1"] as List<string>;
list3.Add("3"); //重新取出app1,输出是添加了3后的结果,也就是说修改list3会影响Application对象,说明是引用
List<string> list4 = Application["app1"] as List<string>;
foreach (string item in list4)
{
Label1.Text += item + "<br />";
}我有点说不明白,整理这段代码,希望大家能明白我的意思。
就是发现application里的对象对于引用类型的获取又象引用又象复制。到底是什么原因呢?
{
Label1.Text = "";
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
Application.Add("app1", list); List<string> list2 = Application["app1"] as List<string>; //移除app1,输出然后是正常的,也就是说移除application对象不影响list,list是新复制的对象
Application.Remove("app1");
foreach (string item in list2)
{
Label1.Text += item + "<br />";
}
}
protected void Button3_Click(object sender, EventArgs e)
{
Label1.Text = "";
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
Application.Add("app1", list); //取出app1并添加一个3
List<string> list3 = Application["app1"] as List<string>;
list3.Add("3"); //重新取出app1,输出是添加了3后的结果,也就是说修改list3会影响Application对象,说明是引用
List<string> list4 = Application["app1"] as List<string>;
foreach (string item in list4)
{
Label1.Text += item + "<br />";
}我有点说不明白,整理这段代码,希望大家能明白我的意思。
就是发现application里的对象对于引用类型的获取又象引用又象复制。到底是什么原因呢?
解决方案 »
- GUID为主键编号的树形表结构该如何插入数据?
- asp.net执行oracle的存储过程问题!
- 如何解决重复签到的问题
- 大侠来救命!!!
- 如何实现论坛里的帖子被顶就会置顶的功能啊?
- 请教高手指教很简单的问题 我迷惑了
- 小菜求助!!
- 执行带字符串的exec语句,当字符串长度超过256时,字符串就会被截断,执行语句出错了,该如何解决呢
- 高分请教三个问题:请各位大侠指教 !请思归大哥指点!!
- 请教个VB.net在ASP中的问题
- 推荐一个“asp.net+sql2000”的空间,免费收费都行、
- |zyciis| CSS问题, 如何让我的DIV设置为Display:inline 的时候 当他的总宽度超过1000px的时候自动换行 这个要怎么办
因为第一个你是用Application去拿List 结果List就复制了一个给Application
第二个是你要从Application里面拿东西出来 那个就是引用了
所以在修改的时候也会被修改到
第二个是你要从Application里面拿东西出来 那个就是引用了list4居然是application的一个引用,那么,为什么删除application对象,这个引用的对象还存在,在label里依然能有这些值呢,而不是消毁了呢?
这个应该并不是删除对象 而是对对象引用的删除
你可以试着用
Label1.Text = "";
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
Application.Add("app1", list); List<string> list2 = Application["app1"] as List<string>; //移除app1,输出然后是正常的,也就是说移除application对象不影响list,list是新复制的对象
//Application.Remove("app1");
Application["app1"] = null;//赋值为空
foreach (string item in list2)
{
Label1.Text += item + "<br />";
}这样list2就为空了
Label1.Text = "";
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
Application.Add("app2", list);
list.Add("5"); List<string> list2 = Application["app2"] as List<string>; //移除app1,输出然后是正常的,也就是说移除application对象不影响list,list是新复制的对象
//Application.Remove("app1");
//Application["app1"] = null;
foreach (string item in list2)
{
Label1.Text += item + "<br />";
}这个最后会输出 125
这个只是删除掉引用关系而已
//null
Application["app1"] = null;
foreach (string item in list2)
{
Label1.Text += item + "<br />";
}
还是能输出1,2,也就是说将application对象赋为null,list2还是存在,那么,获取application是复制对象的。