【发布时间】:2015-06-15 06:22:08
【问题描述】:
我正在查看 Web 应用程序的源代码,并且可以看到大量用例,例如下面的示例代码。我在网上找不到任何关于在 C#(复杂类型)中声明局部变量时的信息,我只想确定它是否创建了该对象的引用或副本。来自 JavaScript 背景,我想它总是会创建一个引用,除非它是原始数据类型。
代码是这样的
CustomItemType myVarA = (CustomItemType) this.Session["VAR_1"];
// Do some work on the properties of VAR_1
int num2 = checked (myVarA.Items.Count - 1);
int index = 0;
while (index <= num2)
{
myVarA.Items[index].StatusCode = "Posted";
checked { ++index; }
}
// Save back to the session
this.Session["VAR_1"] = (object) myVarA;
我是否认为不需要以下行。
// Save back to the session
this.Session["VAR_1"] = (object) myVarA;
由于局部变量myVarA 只是对会话中属性的引用,所以如果您更新本地变量,那么您也将更新会话对象?
其次,当每个网页都在一个新线程中提供服务时,这是否会造成问题,这些线程将访问同一个会话对象并同时进行操作?
【问题讨论】:
-
这取决于
CustomItemType。如果它是一个类,那么它是一个引用类型,并且确实不需要保存回来。如果它是一个结构,它是一个值类型,你会得到一个副本。 -
最好检查一下。 session 可以做一些奇怪的事情,并且可以有不同的后备商店
标签: c#