【发布时间】:2017-01-27 17:28:58
【问题描述】:
我想解释一下我的摘要代码流程。
我有Session["MainRule"],我调用了一个方法来从中获取所选项目 =>
var temprule=get_temp_rule_byid(Session["MainRule"],id);
我把这个temprule 放到Session["temprule"]。
因为当我更新Session["temprule"]时,我不想更新主会话Session["MainRule"]。
但是当我在Session["temprule"]. 中进行更新时,为什么Session["MainRule"] 的值会自动改变?
更新
var temprule= RulesRepository.get_temp_rule_byid(Session["MainRule"], id);
public static RuleViewModel get_temp_rule_byid(object rulesFromSession, string id)
{
RuleViewModel ruleViewModel = null;
var temp = rulesFromSession as Dictionary<string, RuleViewModel>;
if (temp?.TryGetValue(id, out ruleViewModel) == true)
{
return ruleViewModel;
}
return null;
}
【问题讨论】:
-
显示
get_temp_rule_byid的代码。 -
如果不同的会话变量发生变化,那是因为您的代码发生了变化。发布您的代码。
-
我怀疑如果您将
Session替换为任何其他字典并尝试进行单元测试,您会看到相同的行为。 -
什么是
temprule?如果这是一个类的实例,并且您将 相同的实例 存储在Session["MainRule"]和Session["temprule"]...那么 是 已更改的实例。似乎您想在Session["temprule"]中存储规则的副本。 -
@RenéVogt temprule 是一个临时会话。