为什么我的会话变量在我只在局部变量中修改时会更新。如果他们共享相同的引用,那么我想知道为什么它在这种情况下的唯一更新不是在我使用类似代码的任何其他情况下。
private void AddRefCodeToDTandConvertUnitValue(string StrRefCode)
{
DataTable dt = new DataTable();
dt = Session["dataTable"] as DataTable;
if (!dt.Columns.Contains("refCode"))
dt.Columns.Add("refCode", typeof(String));
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["refCode"] = StrRefCode;
if (DrpUnits.Items.FindByText(dt.Rows[i]["Units"].ToString()) != null)
dt.Rows[i]["Units"] = DrpUnits.Items.FindByText(dt.Rows[i]["Units"].ToString()).Value;
}
}
答案 0 :(得分:0)
我在其中一个网络应用程序中遇到了同样的问题。
这是因为当您将Session值转换为DataTable时,它将指向相同的内存位置。
为避免更新Session变量,您可以在进行类型转换时深度克隆它。它将在另一个具有相同值的内存位置创建另一个DataTable实例。