使用现有密钥向Session添加新对象是否替换旧对象?
比方说,我用特定的键将对象放到会话变量中。后来我把另一个对象用同一个键。我最终会得到什么?使用现有密钥向Session添加新对象是否替换旧对象?
Session["keyA"] = objectA;
另一个请求以后
Session["keyA"] = objectB;
对象A和对象B均为List<T>
。结果是一个对象C,其中包含来自objectA和objectB的行。
我的理解是,当你把一个新的对象与现有的,新的对象替换旧的。
也许我在别的地方有另一个错误导致这种行为,但到目前为止,这是我所经历的。
为什么会发生这种情况?
如果使用赋值运算符会导致类似的行为,那么您的代码中还有其他内容正在执行。没有理由将Session["keyA"]
设置为objectB
会导致它与objectA
合并。
Session
就此答案而言是Dictionary<string, object>
。尝试运行这段代码:
var d = new Dictionary<string, object>();
var objectA = new List<string> { "a", "b", "c" };
var objectB = new List<string> { "d", "e", "f" };
d["keyA"] = objectA;
d["keyA"] = objectB;
if (d["keyA"] == objectB) {
Console.WriteLine("has objectB at 'keyA'");
} else {
Console.WriteLine("has something else, I don't know");
}
这应该写在控制台 “有对象B在 '科亚'”。
如果没有出现可怕的错误,您应该立即拔下电脑的插头,取出所有电池,并以安全的方式处理整件事。
有趣? Loool!我只是想挽救自己到数据库的行程。非常感谢你的解释。 – Richard77
我的理解是,当你用一个现有的新对象, 新对象替换旧对象。
不,它不会取代旧的。正如你所知道的,当你将一个对象存储到一个变量中,然后将它分配给另一个变量时,它们都是相同的,因为它只是内存中的对象引用地址。
var obj1 = new Object();
var obj2 = obj1;
// this line just set value of obj2 into null and obj1 is still works
obj2 = null;
在你的情况没有什么不同,从我上面的代码表示:
Session["keyA"] = objectA;
// this won't replace `objectA` with objectB
// only store the reference of objectB in the dictionary with keyA
Session["keyA"] = objectB;
也许我已经在其他地方的另一个缺陷是造成这种行为, 但到目前为止,这是我正在经历。
我确定在你的代码中还有其他的错误。
感谢您的解释。 – Richard77
define *替换*:替换参考(指针),替换内存本身(如复制),...?在你的例子中'objectC'在哪里,你究竟如何访问它? –