【问题标题】:What's the Difference between Session.Add("key",value) and Session["key"] = value?Session.Add("key",value) 和 Session["key"] = value 有什么区别?
【发布时间】:2012-04-18 13:33:34
【问题描述】:

谁能给我解释一下:

Session.Add("name",txtName.text);Session["name"] = txtName.text;

这是一个面试问题,我回答说两者都以 key = "Value" 格式存储数据,就像 C# 中的 Dictionary 类一样。

我是对的,还是有什么不同?

【问题讨论】:

  • 我确信有一些关于此的不错的 msdn 文档。也许你可以自己研究一下,为下一次面试做好准备。
  • 这是一个可怕的面试问题。
  • @EricLippert,我完全同意。在大多数组织中,招聘开发人员的流程非常不完善。
  • @EricLippert 如果没有别的,它会为可能不知道两者相同的没有经验的开发人员抛出标志。 IMO 大多数网络开发人员都应该知道这一点。但总的来说,是的,这是一个弱问题。
  • @EricLippert 离题多年后...曾经在一次采访中被要求将十进制数转换为十六进制数。

标签: c# asp.net session


【解决方案1】:

查看HttpSessionState 的代码表明它们实际上是相同的。

public sealed class HttpSessionState : ICollection, IEnumerable
{
    private IHttpSessionState _container;
...
    public void Add(string name, object value)
    {
        this._container[name] = value;
    }

    public object this[string name]
    {
        get
        {
            return this._container[name];
        }
        set
        {
            this._container[name] = value;
        }
    }
...
}

对于他们两个

key = "Value" 格式存储数据,如C# 中的Dictionary 类。

他们实际上将结果存储在 IHttpSessionState 对象中。

【讨论】:

  • 这是一个很好的答案,因为它在代码中准确地显示了为什么这两个函数是等价的,这有助于内化这个概念。我喜欢@matthew 的另一条评论中关于字典的注释,因为我一直在想我们在会话状态下使用字典或其他哈希表,坦率地说,我一直在做愚蠢的舞蹈来检查是否一个值在添加或修改之前已经存在。
  • 这不一样,因为:当 key 存在时 valueupdate 但如果 key 不存在 存在,他们 create 带有 value,如果喜欢 *SaveOrUpdate* 方法。
【解决方案2】:

您发布的两个代码 sn-ps 在功能上是相同的。两者都更新(如果不存在,则创建)由键定义的某个 Session 对象。

Session.Add("name",txtName.text);

等同于:

Session["name"] = txtName.text;

第一个是method-based,,第二个是字符串indexer-based

两者都会覆盖键所持有的先前值。

【讨论】:

  • Dictionary相比,如果你尝试和Add使用相同的键两次访问字典,它会抛出异常。 Dictionary 的索引器与 Session 对象的工作方式类似(它将添加或更新,并且不会引发异常)。
  • @Mathew - 感谢您的额外说明
猜你喜欢
  • 2013-06-24
  • 2012-01-25
  • 2015-10-12
  • 2013-09-22
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多