ASP.NET C# Application 用法

作者:vkvi 来源:ITPOW(原创) 日期:2017-5-4

关于 ASP.NET 的 Application 的用法,与 Session 非常不同。关于 Session,请参见:ASP.NET C# Session 笔记几则,下面介绍 Application 的用法。

名称重复问题

如上代码,结果我们在备注中列出了。可以看出 Application 遇到键值相同,它既不报错,也不覆盖之前的,而是同时存在。用键值名称去取值时,忽略大小写,取到的是同名中第一个对应的值。如果非要取后面的,就用 index

如果我们要遇相同 name,就覆盖,可用下面的代码

上面代码中,直接修改 obj 是行不通的,但是遇到对象的话,如下代码是行得通的。说明:这是 C# 值引用、地址引用的知识点,与 Application 无关。

((Site)obj).Url = "222"; // 行得通

既然 Add 这么麻烦,为什么非要用 Add?

的确,我们可以不用 Add。

这样的话,就只存在一个 key3(小写),值为 value3-2,也就是说项名称以先产生的为准项值以后产生的为准。同样取值时项名称也是忽略大小写的

如何删除一个 Application 项?

如上只是把第一个 key2(忽略大小写)的值设置为 null(后面的两个 key2 不受影响),只是改变值,但是 Application 项还是存在的,即上面还是 4 个。

如上,三个 key2 都被删除了,因为忽略大小写。如果要删除某一个,可以用 RemoveAt。

总结

  • key 不管是赋值、取值、删除时,都忽略大小写。
  • Application.Add(key, value),赋值时,key 相同不会覆盖前面的。
  • Application[key] = value,赋值时,key 相同覆盖前面的,首次赋值也可以这么用。覆盖时,仅覆盖值,不会改变 key 的大小写。
  • Application[key] = valuevalue = Application[key],赋值、取值时,如果有多个同名的 key,都是针对第一个
  • Application[key] = null,并不是删除值,而是赋值为 null。
  • Application.Remove(key),删除所有名称为 key 的项。
  • 如果要操作同名的不同项,不管是赋值、取值、删除,都可用索引:Application[i]、Get(i)、RemoveAt(i),不过索引不能越界。而 key 方式则不论是否存在,均可赋值、取值、删除

其实我都猜到了这个内部程序是怎么写的了。

Add 就是硬生生地 Add。

而 Application[key] 就是 for 循环,if (item.key.大小写比较(key)) break;

而 Remove 是 int i = 0; while (i < items.Count) 内部无 break。

相关文章